regex 如何匹配字符串的开头“像”它在字符类?

vh0rcniy  于 2023-11-20  发布在  其他
关注(0)|答案(3)|浏览(139)

我在一个文件中有一个字符串说:

abc

字符串

def abc


我想匹配abc,这样它就可以出现在行的开头或空白之后。
我可以通过匹配多个模式来实现,用|分隔,比如:

/^abc|[[:blank:]]+abc/


但是是否有某种方法可以包含^,即字符串的开头类似于字符类。
^在字符类的开头意味着求反,其他位置意味着只匹配插入符号('^')字符
此外,在我原来的例子中,字符串不仅仅是abc,而是一个与复杂正则表达式匹配的字符串,所以我希望它尽可能干净。我在awk脚本中匹配这个正则表达式。虽然我仍然包含bash标记,因为system()函数仍然可以在其中使用。速度对我来说并不重要,在我的例子中,但清晰度可以

wwodge7n

wwodge7n1#

使用捕获组:

(^|[[:blank:]]+)abc

字符串
它将匹配字符串的开头或一串空格。如果您不需要在匹配中使用abc之前的所有空格,而只需要最后一个空格,则可以删除+

33qvvth1

33qvvth12#

这应该做到:

/(^|[[:blank:]])abc/

字符串
^ start或[[:blank:]]开始,然后abc

jtw3ybtb

jtw3ybtb3#

开始或行^不是一个字符,它是一个锚,所以把它放在一个字符类以及\A$\z\b没有意义。
在你的例子中,你只需要测试wordboundary,不需要使用一个会减慢正则表达式速度的捕获组:

\<abc

字符串
这是匹配abc时,由行首或非字字符前缀。
Demo

相关问题