Bash正则表达式匹配组

时间:2017-07-02 15:29:30

标签: regex bash

所以我有一个匹配特定包的正则表达式,即org.package.util 我还需要捕获如下的包: " org.package.util.ca#lc org.package.util.di #v org.package.util.http11 等等"在它之后"。" ,"#"," [0-9]" ,[a-z]和空格 目前我的正则表达式的这一部分是\([0-9a-z.#\s]*\)*但是如果没有#('')或数字

,它似乎只能抓住按字母顺序排列的字符

2 个答案:

答案 0 :(得分:1)

正如man bash所说:

  

可以使用另外的二元运算符=〜,其优先级与==和!=相同。使用它时,操作符右侧的字符串被视为扩展正则表达式并相应地匹配(如在regex(3)中)。

因此,在Bash中,您必须使用扩展正则表达式(POSIX ERE),而\sPCRE中的空白字符类,其中[:space:]是POSIX等价物

请注意,在PCRE中,您还可以使用POSIX字符类([:digit:][:alpha:]等)以及PCRE类(\d\w等)。

如果您需要更高级的正则表达式功能(如反向引用,前瞻/后瞻断言,条件子模式,递归模式等),您可以在grep中使用-P标志启用PCRE支持。

此外,问题尚不清楚,但似乎您正在逃避分组括号并直接在条件内编写正则表达式(如:[[ "$text" =~ \([a-z]+\) ]])。将正则表达式存储在变量中(例如re='([a-z]+)')并将其用作[[ "$text" =~ $re ]],这是一种很好的做法。这样,您的表达式将更清晰,更易于维护,因为您只需编写ERE语法并避免需要shell转义。

答案 1 :(得分:0)

使用header .container .nav-primary { height: 100%; } 代替[:space:]

\s似乎只是某些程序的扩展。我认为\s更可靠。

相关问题