regex - 正则表达式基于两个字符串查找匹配项,而不考虑序列
问题描述
我需要可以根据两个字符串找到匹配项的正则表达式。字符串可以按任何顺序排列,并且不能彼此相邻。
这是功能性的,但我想知道是否有更聪明的方法:
(游侠。{0,150}牛仔)|(牛仔。{0,150}游侠)
它工作的例子:
牛仔被任命为游侠。
并不是所有的护林员都是好牛仔。
解决方案
您可以在 PCRE/Onigmo 中使用以下正则表达式:
(ranger|cowboy).{0,150}(?!\1)\g<1>
请参阅正则表达式演示。
细节
(ranger|cowboy)
- 第 1 组:ranger
或cowboy
.{0,150}
- 除换行符以外的任何 0 到 150 个字符,尽可能多(?!\1)\g<1>
- 匹配第 1 组模式,但如果右边的值是当前第 1 组值,则不匹配。因此,如果 Group 1 匹配ranger
,则此模式无法匹配它,只能匹配 acowboy
。
推荐阅读
- django - 如何为我在谷歌云平台上运行的网站设置免费 SSL 证书。(视窗 10)
- html - 垂直填充但根据内容保持宽度
- holochain - Holochain:如何使用生产指挥查询实例?
- javascript - 如何在 p5.js 中使用 dist() 计算旋转?
- flutter - 耀斑和颤振问题
- amazon-web-services - AWS SAM - 如何将参数传递给 Lambda 函数
- android - 带有 WebView 的 Android 弹出登录屏幕
- c# - 使用 SQL 选择结果写入 C# DataTable 时出现转换失败错误
- r - 更改数据帧结构(两个数据帧为一个)
- python - 投资组合优化工具的问题 - IndexError