我需要逻辑和在正则表达式。

类似的

杰克和詹姆斯

同意以下字符串

'嗨,杰克,我是詹姆斯' '嗨,詹姆斯,我是杰克'


当前回答

我要写的命令说明:-

. 表示任何字符、数字都可以代替。

*表示零次或多次在它前面写的东西。

|表示“或”。

So,

james.*jack

会搜索詹姆斯,然后任意数量的角色,直到杰克出现。

既然你想要任何一个杰克。詹姆斯还是詹姆斯,杰克

于是命令:

jack.*james|james.*jack

其他回答

你可以:

\bjack\b.*\bjames\b|\bjames\b.*\bjack\b

我要写的命令说明:-

. 表示任何字符、数字都可以代替。

*表示零次或多次在它前面写的东西。

|表示“或”。

So,

james.*jack

会搜索詹姆斯,然后任意数量的角色,直到杰克出现。

既然你想要任何一个杰克。詹姆斯还是詹姆斯,杰克

于是命令:

jack.*james|james.*jack

Vim有一个分支操作符\&,在以任何顺序搜索包含一组单词的行时非常有用。此外,扩展所需的单词集是微不足道的。

例如,

/ *杰克\ &。*詹姆斯

将以任意顺序匹配包含jack和james的行。

有关用法的更多信息,请参阅这个答案。我不知道有任何其他实现分支的正则表达式;这个运算符甚至没有在正则表达式维基百科条目中被记录。

Try:

james.*jack

如果你同时想要两者,那么:

james.*jack|jack.*james

你可以使用regex的量词特性,因为不一定总是支持查找。

(\bjames\b){1,}.*(\bjack\b){1,}|(\bjack\b){1,}.*(\bjames\b){1,}