【发布时间】:2020-01-04 05:57:12
【问题描述】:
我在文件中有一个字符串说:
abc
或
def abc
我想匹配abc,使其可以出现在行首或空白之后。
我可以通过匹配多个模式来做到这一点,用| 分隔,比如:
/^abc|[[:blank:]]+abc/
但是有什么方法可以包含^,即字符串的开头类似于字符类。
^ 表示 否定,其他位置表示仅匹配 carrot('^') 字符。
另外,在我原来的情况下,字符串不仅仅是abc,而是一个与复杂正则表达式匹配的字符串,所以我希望它尽可能干净。我在awk 脚本中匹配这个正则表达式。虽然我仍然包含bash 标签,因为system() 函数仍然可以在其中使用。就我而言,速度对我来说并不重要,但清晰度很重要。
【问题讨论】:
-
在 POSIX 正则表达式术语中,character class 是一个预定义的字符串,表示一组字符,例如
[:space:]或[:alnum:]。您可以使用 括号表达式 中的那些来匹配正则表达式中的字符集,例如[[:space:]]或[[:alnum:]]或[[:space:][:alnum:]]。所以你真正要问的不是is there some way to include ^ i.e. beginning of the line in character class.,因为不可能将字符添加到字符类中,你要问的是is there some way to include ^ i.e. beginning of the line in a bracket expression. -
答案是“否”,因为
^在这种情况下不是一个字符,它是一个表示“字符串开头”的正则表达式构造(不是“行首” - 它只是顺便说一句,当您正在处理的字符串是一行时,表示“行首”),因此您不能将其包含在括号表达式中,该表达式是一组字符加上否定^和范围-说字符。 -
@EdMorton 是的,我最近发现了这一点。也对我的问题进行了更正。谢谢