我需要逻辑和在正则表达式。
类似的
杰克和詹姆斯
同意以下字符串
'嗨,杰克,我是詹姆斯' '嗨,詹姆斯,我是杰克'
我需要逻辑和在正则表达式。
类似的
杰克和詹姆斯
同意以下字符串
'嗨,杰克,我是詹姆斯' '嗨,詹姆斯,我是杰克'
当前回答
不需要两个lookhead,一个子字符串可以正常匹配。
^(?=.*?\bjack\b).*?\bjames\b.*
在regex101上查看这个演示
查找是零长度断言(条件)。这里的forward在^ start处检查是否jack出现在字符串的后面,如果成功则匹配到james和.*其余部分(可以删除)。Lazy dot用于单词之前(包含在\b单词边界中)。使用i标志来忽略大小写。
其他回答
Try:
james.*jack
如果你同时想要两者,那么:
james.*jack|jack.*james
你可以:
\bjack\b.*\bjames\b|\bjames\b.*\bjack\b
你可以使用regex的量词特性,因为不一定总是支持查找。
(\bjames\b){1,}.*(\bjack\b){1,}|(\bjack\b){1,}.*(\bjames\b){1,}
Vim有一个分支操作符\&,在以任何顺序搜索包含一组单词的行时非常有用。此外,扩展所需的单词集是微不足道的。
例如,
/ *杰克\ &。*詹姆斯
将以任意顺序匹配包含jack和james的行。
有关用法的更多信息,请参阅这个答案。我不知道有任何其他实现分支的正则表达式;这个运算符甚至没有在正则表达式维基百科条目中被记录。
不需要两个lookhead,一个子字符串可以正常匹配。
^(?=.*?\bjack\b).*?\bjames\b.*
在regex101上查看这个演示
查找是零长度断言(条件)。这里的forward在^ start处检查是否jack出现在字符串的后面,如果成功则匹配到james和.*其余部分(可以删除)。Lazy dot用于单词之前(包含在\b单词边界中)。使用i标志来忽略大小写。