![]() |
1
1
一些变化:
首先,
其次,在“dolor e”和其他任何与dolor\w+有关的情况下,终端“e”本身就变成了一个单词;为了与上面的规范相匹配,我添加了\w*\s*,以便在剩余的单词中捕获任何单词结尾字符和终端空间。 否则,非贪心的“?”这里不需要char,因为您已经在\w+的末尾指定了\b,所以我也清除了它们。 |
![]() |
2
0
它在开始/结束时失败,因为您指定(或至少尝试指定…)匹配必须正好包含两个前导和尾随上下文的单词。如果你的“多尔”是第一个词,那么前面就没有了,所以比赛失败了。改变
另外一件事很快就显得与众不同,那就是你使用
不过,归根结底,我认为正则表达式可能不是实现所要实现的目标的最佳方法,或者至少不是靠它们自己。最有效的方法可能是建立一个自定义的全文搜索,使用包含单词文本的反向索引、它的位置(这样您就可以按正确的顺序获取它们)和上下文中突出显示的单词(这样您就可以将它们连接在一起以获得最终的结果)。 如果这不是一个选项,我将把文本拆分成一组单词,然后在其中扫描目标单词。这不仅使处理上下文需求变得更容易,我还希望它比纯regex解决方案运行得更快,因为它将严重减少对回溯的潜在需求。(不过,在文本上运行两次传递(第一次传递将文本拆分为一组单词,第二次传递将每个单词与搜索词进行比较)可能会使事情发生相反的变化。) |
![]() |
3
0
关于只有一个词匹配的问题: 从 PHP PCRE 文档
例如
这个regex应该能让你更亲近一点。
在字符串末尾或开头不适用于Dolor。不处理非空格或非单词字符。不能处理多个Dolor实例相互跟随的问题(例如Dolor Dolor Dolor)。当Dolor处于“2字范围”时无法处理(例如Lorem Ipsum Dolor Amet Dolor)。我现在想不出的其他特殊情况也会被解开。 |
![]() |
DotFX · RegEx捕获关键字前但括号后的所有内容 5 月前 |
![]() |
Andrus · 如何在sql中查找第二个匹配项 6 月前 |
![]() |
iato · 确保正则表达式不从命名材料中的数字中提取 6 月前 |
![]() |
vr8ce · 非成对标记中特定字符的正则表达式 6 月前 |
![]() |
MARTIN · 交换第一个和最后一个单词,反转所有中间的字符 6 月前 |
![]() |
Carsten · 使用最近的搜索模式更改文本块 6 月前 |