2

我正在尝试创建一个正则表达式来捕获重复字符之间的文本。我只想捕获 3 个重复字符之间的文本,但我不想匹配 4 个或更多字符之间的文本。

例子:

==Text not to capture==
===Text to capture===
====Text not to capture====
=====Text not to capture=====

此正则表达式将捕获具有 3 === 和更多的那些:

(?<=[=]{3})(.*?)(?=[=]{3})

如何排除具有 4 个或更多字符的那些?

4

2 回答 2

3

您可以在代码中添加负面环视,以确保在=您捕获的部分之前/之后没有另一个。

(?<=(?<![=])[=]{3})(?![=])(.*?)(?<![=])(?=[=]{3}(?![=]))

如果你想看到分解:

第一次后视确保您的代码以===. 内部的负面后视确保前面没有另一个 =. 然后前瞻确保它不会被另一个=.

(?<=(?<![=])[=]{3})(?![=])

捕捉一些东西,其中可以包括=字符:

(.*?)

然后确保你有===,再次使用嵌套环视以确保=外部没有另一个,以及一个单独的(较小的)环视以确保内部没有另一个。

(?<![=])(?=[=]{3}(?![=]))
于 2013-08-20T18:38:42.317 回答
1

您可以使用它,并获取捕获组:

(?<!=)={3}([^=]+)={3}(?!=)

或者如果你想允许=里面:

(?<!=)={3}((?>[^=]+|=(?!==(?:[^=]|$)))+)={3}(?!=)
于 2013-08-20T18:43:10.443 回答