首页 > 解决方案 > 正则表达式基于两个字符串查找匹配项,而不考虑序列

问题描述

我需要可以根据两个字符串找到匹配项的正则表达式。字符串可以按任何顺序排列,并且不能彼此相邻。

这是功能性的,但我想知道是否有更聪明的方法:

(游侠。{0,150}牛仔)|(牛仔。{0,150}游侠)

它工作的例子:

牛仔被任命为游侠。

并不是所有的护林员都是好牛仔。

标签: regexregex-lookarounds

解决方案


您可以在 PCRE/Onigmo 中使用以下正则表达式:

(ranger|cowboy).{0,150}(?!\1)\g<1>

请参阅正则表达式演示

细节

  • (ranger|cowboy)- 第 1 组:rangercowboy
  • .{0,150}- 除换行符以外的任何 0 到 150 个字符,尽可能多
  • (?!\1)\g<1>- 匹配第 1 组模式,但如果右边的值是当前第 1 组值,则不匹配。因此,如果 Group 1 匹配ranger,则此模式无法匹配它,只能匹配 a cowboy

推荐阅读