正则表达式找到太多匹配

时间:2017-03-24 22:23:04

标签: regex

我想我现在几乎让我的Regex失效了(感谢这个社区)。我有以下正则表达式:

== [A-Za-z\\s]+ ==

我正在浏览维基百科的文字,所以这就是我在检索后分割文本的方法。一个例子:

== References == or == External Links ==

但有时候我会得到以下内容:

=== Some thing === <-- This is not picked up. Great!
==== Some other Thing ==== <-- "== Some other Thing ==" is picked up. Bad!

我尝试将其更改为以下内容,但没有令人满意的结果:

/^== [A-Za-z\\s]+ ==$/
(?<![\w\d])== [A-Za-z\\s]+ ==(?![\w\d])
/\b== [A-Za-z\\s]+ ==\b/    

我的正则表达式有什么帮助吗?

3 个答案:

答案 0 :(得分:3)

使用negative lookarounds禁止在额外userInfo.set("user_name", userName); 时进行匹配。

=

DEMO

答案 1 :(得分:1)

这对你有用吗?

[=]+ [A-Za-z\\s]+ [=]+

我知道它不会使双方匹配,但它现在应该接收所有实例。

如果您需要限制,还可以将[=]+更改为[=]{1,3}

答案 2 :(得分:1)

你可以用

来实现它
(?<!=)==\s*([^=]+)\s*==(?!=)

请参阅a demo here 这使用负面外观和否定字符类。

<小时/> 只是为了培训目的并为您提供替代方案,您也可以使用子程序:

(?(DEFINE)
    (?<left>(?<!=)(?==))
    (?<right>(?<==)(?!=))
    (?<separator>(?&left)==(?&right))

)
(?&separator)
(.+?)
(?&separator)

同时查看this on regex101.com的演示。