Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 凯特的前瞻模式_Regex_Greedy_Lookahead_Non Greedy_Kate - Fatal编程技术网

Regex 凯特的前瞻模式

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

我正在为一本法律书编制一份案件表。我已经将其转换为HTML,这样我就可以使用标签进行搜索和替换操作,我目前正在Kate工作。正文引用了案例名称,案例引文在脚注中,例如:

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>位于错误的位置)。您能澄清一下吗?我添加了代码格式,以便我们可以看到您在搜索中使用的标记,但示例文本中似乎缺少第二个

标记,而第一个标记实际上是

(其中
/
位于错误的位置)。你能澄清一下吗?