我有这样的句子
word1 word2 abc word3 word4
word1 word2 word3 word4
我想得到匹配:
abc
之前的所有内容abc
或无abc
之后的所有内容
我需要3个不同的匹配,因为$1和$3将按原样复制到输出中,而$2应该被修改。我预计2美元并不总是在那里,还有3美元(。
我目前的解决方案是这个
(.+?(?=abc))(abc)?(.*)
如果abc
不是句子的一部分,这就不起作用。如何用regex表达"匹配所有内容,直到该单词存在"?
第页。S.我使用JS(不确定是否相关(
您可以使用
^(.*?)(?:(abc)(.*))?$
如果字符串可以换行,请使用
^([wW]*?)(?:(abc)([wW]*))?$
请参阅regex演示。在JS中,[wW]
可以替换为[^]
,以匹配任何字符,包括换行字符。
详细信息
^
-字符串的开头(.*?)
-第1组:除换行字符外的任何零个或多个字符,尽可能少(?:(abc)(.*))?
-可选贪婪模式匹配一次或零次:(abc)
-第2组:abc
(.*)
-第3组:除换行字符外的任何零个或多个字符尽可能多
$
—字符串结束
由于第一个组模式是非贪婪的,它将从字符串的开始一直扩展,直到第一次出现可选的非捕获组模式(如果存在(或字符串的结束,如果有abc
,则将填充第二组和第三组,否则整个字符串将落在组1中。