我需要将标记分开:= == <= >= < >
和~=
整齐地放在单独的正则表达式中。目前我有:
(=) for =
[=]{2} for ==
(<=) for <=
(<) for <
(>=) for >=
(>) for >
\~= for ~=
但我担心这些会相互干扰(=
无法匹配等号(例如<=
)
有什么建议吗? 我是regex的新手,所以如果你有答案,请解释一下: - )
答案 0 :(得分:1)
这有点取决于您的环境和正则表达式引擎!如果它是DFA或POSIX NFA引擎,那么您总是会匹配最长,最左侧可能的模式。您可以通过尝试匹配
来确定您的引擎是否以这种方式工作nfa|nfa not
反对字符串&#34; nfa not&#34;。如果整个字符串匹配,那么你知道你正在使用最长的最左边的引擎,即。 DFA或POSIX NFA。
然而,最常见的引擎类型是传统NFA,你可以通过你的正则表达给你很多表现力和控制力,但是,像往常一样,这种力量来自责任。在传统的NFA中,最长的最左边是无法保证的。我将解释Alex K的abc | ab |解决方案。 &#39; |&#39; (称为OR或交替)是一种表示匹配abc或ab的方式。你可能想知道,&#34;如果文字是&#39; abc&#39;在这种情况下,任何一个都可以工作!&#34;。那是真实的!在传统的NFA中,选项从左到右进行尝试。所以在传统的NFA中,在文本中搜索ab | abc&#34; abc&#34;将匹配&#34; ab&#34;并且搜索abc | ab将匹配整个&#34; abc&#34;。您可以通过在文字中搜索&lt; = | =来充分利用这一点,以确保您始终获得&#39;&lt; =&#39;而不只是&#39; =&#39;。
事实证明,Alex K的解决方案无论引擎如何都能正常工作,因为&#39;&lt; =&#39;也是最长的,最左边的比赛。我想我会给出更深入的解释,以提供一些理解,也许会引起你的兴趣。查看&#39;掌握正则表达式&#39;作者:J。Friedl如果你想了解更多!