Regex 凯特的前瞻模式
我正在为一本法律书编制一份案件表。我已经将其转换为HTML,这样我就可以使用标签进行搜索和替换操作,我目前正在Kate工作。正文引用了案例名称,案例引文在脚注中,例如:Regex 凯特的前瞻模式,regex,greedy,lookahead,non-greedy,kate,Regex,Greedy,Lookahead,Non Greedy,Kate,我正在为一本法律书编制一份案件表。我已经将其转换为HTML,这样我就可以使用标签进行搜索和替换操作,我目前正在Kate工作。正文引用了案例名称,案例引文在脚注中,例如: Smith诉Jones127。。。。。。。。。[其他材料,包括新行字符]……。127(1937)173 ER 406 我已经能够通过以下方式在Kate中实现前瞻性工作: *([0-9]{1,4})。+\1.* …但我遇到了贪婪的问题 文本很乱,所以我真的需要一步一步地找到匹配项,而不是依赖于批处理过程 是否有一个Linux(或W
Smith诉Jones127。。。。。。。。。[其他材料,包括新行字符]……。127(1937)173 ER 406代码>
我已经能够通过以下方式在Kate中实现前瞻性工作:
*([0-9]{1,4})。+
\1.*
…但我遇到了贪婪的问题
文本很乱,所以我真的需要一步一步地找到匹配项,而不是依赖于批处理过程
是否有一个Linux(或Windows)文本编辑器同时支持前瞻和非贪婪运算符,或者我必须尝试grep或sed?我对Kate不熟悉,但它似乎在使用,这在许多重要方面与其他类似Perl的正则表达式风格不兼容。例如,大多数口味允许您通过添加问号(例如*
=>+?
)使单个量词不贪婪,但在QRegExp中,您只能使它们全部贪婪或全部不贪婪。更糟糕的是,凯特甚至不让你这么做——比如通过一个非贪婪的复选框
但无论如何,最好不要总是依赖非贪婪的量词。一方面,正如许多人所说,他们不能保证最短的匹配。你应该养成习惯,在不太困难的情况下,更具体地说明什么是应该匹配的,什么是不应该匹配的。例如,如果要匹配的节不包含除示例字符串中的标记以外的任何标记,则可以执行以下操作:
<i>[^<]*</i>(\d+)\b[^<]+<br/>\1\b[^<]*<br/>
顺便说一下,你所说的前瞻(我假设你的意思是\1
)实际上是一个反向参考。我的正则表达式中的(?!br/>)
就是lookaheads的一个例子——在本例中是一个负的lookahead。Kate/QRegExp文档声称支持lookaheads,但不支持非捕获组(例如,(?:…)
),这就是为什么在最后一个正则表达式中使用所有捕获组的原因
如果您可以选择切换到其他编辑器,我强烈建议您这样做。我最喜欢的是;它拥有我在编辑器中见过的最好的正则表达式支持。我对Kate不熟悉,但它似乎在使用,这在许多重要方面与其他类似Perl的正则表达式风格不兼容。例如,大多数口味允许您通过添加问号(例如*
=>+?
)使单个量词不贪婪,但在QRegExp中,您只能使它们全部贪婪或全部不贪婪。更糟糕的是,凯特甚至不让你这么做——比如通过一个非贪婪的复选框
但无论如何,最好不要总是依赖非贪婪的量词。一方面,正如许多人所说,他们不能保证最短的匹配。你应该养成习惯,在不太困难的情况下,更具体地说明什么是应该匹配的,什么是不应该匹配的。例如,如果要匹配的节不包含除示例字符串中的标记以外的任何标记,则可以执行以下操作:
<i>[^<]*</i>(\d+)\b[^<]+<br/>\1\b[^<]*<br/>
顺便说一下,你所说的前瞻(我假设你的意思是\1
)实际上是一个反向参考。我的正则表达式中的(?!br/>)
就是lookaheads的一个例子——在本例中是一个负的lookahead。Kate/QRegExp文档声称支持lookaheads,但不支持非捕获组(例如,(?:…)
),这就是为什么在最后一个正则表达式中使用所有捕获组的原因
如果您可以选择切换到其他编辑器,我强烈建议您这样做。我最喜欢的是;它具有我在编辑器中见过的最好的正则表达式支持。我添加了代码格式,以便我们可以看到您在搜索中使用的标记,但是示例文本中似乎缺少第二个
标记,而第一个标记实际上是
(其中//code>位于错误的位置)。您能澄清一下吗?我添加了代码格式,以便我们可以看到您在搜索中使用的标记,但示例文本中似乎缺少第二个
标记,而第一个标记实际上是
(其中/
位于错误的位置)。你能澄清一下吗?