在 Bash 中,特定字符之前的多个子字符串并继续

问题描述 投票:0回答:1

我正在尝试编写一个可以满足以下条件的正则表达式。

  • 首先,字符串将以多个子字符串开头 -->
    ^(aa|bb|cc)
  • 第二个,然后是多个子字符串,它必须以指定的字符继续
    . (dot)
    @ (at)
    -->
    ^(aa|bb|cc) [.@]
  • 第三,在指定字符之后,必须包含至少一个出现的字符集,包括
    [a-zA-Z0-9_]
    字符集或至少出现一个除
    .@
  • 之外的任何字符集

示例:

string | matched
----------------
aa.xya -> true
aa.    -> false
aa     -> false
--------
bb.@b  -> false
bb@b   -> true
bb.b   -> true
---------
cc.bb. -> false
cc.bb@ -> false
cc.xz  -> true 
...
...
...

我需要一个包含所有状态的$PATTERN,那么我的$PATTERN应该是什么?

if [[ "$string" =~ $PATTERN ]] 
regex bash
1个回答
0
投票

你很接近了。

(aa|bb|cc)
[.@]
之间不应有空格。对于第三部分,使用 [^.@]+$` 匹配至少一个不在此字符集中的字符,一直到末尾。

^(aa|bb|cc)[.@][^.@]+$

演示

在演示中,我在最后一部分添加了

\n
,因此它与换行符不匹配。如果
$string
只是一行,那对您的使用来说应该不重要。

© www.soinside.com 2019 - 2024. All rights reserved.