所以我有一个匹配特定包的正则表达式,即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]*\)*
但是如果没有#('')或数字
答案 0 :(得分:1)
正如man bash
所说:
可以使用另外的二元运算符=〜,其优先级与==和!=相同。使用它时,操作符右侧的字符串被视为扩展正则表达式并相应地匹配(如在regex(3)中)。
因此,在Bash中,您必须使用扩展正则表达式(POSIX ERE),而\s
是PCRE中的空白字符类,其中[: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
更可靠。