【发布时间】:2018-02-04 18:54:34
【问题描述】:
给定一个正则表达式re和一个输入字符串str,我想找到str的最大子字符串,它从匹配re的最小位置开始。
特殊情况:
re = Regex("a+|[ax](bc)*"); str = "yyabcbcb"
将 re 与 str 匹配应返回匹配字符串 "abcbc"(而不是像 PCRE 那样返回 "a")。我还记得,如果更改顺序,结果就是我想要的。
【问题讨论】:
-
然后使用
"[ax](?:bc)*|a+"。一旦a与a+匹配,您就不能指望尝试下一个替代方案。 -
但这正是我想要的。我需要一种“贪婪的交替”。此外,将给定的正则表达式调整到输入字符串也不是一种选择。例如 str = "yyaaaa" 输出应为 "aaaa" 而不是 "a"。
-
PCRE 是一个 NFA 正则表达式引擎,其中匹配的第一个替代模式使正则表达式引擎跳过其余的替代模式。没有办法让它表现得不同。使用 DFA 正则表达式库,如
sed/grep和其他基于 POSIX 的正则表达式引擎。 -
你能推荐一个特定的正则表达式库,它可以满足我的目的吗?理想情况下,它应该是可用于 Linux、Windows、Mac-OS 的 C 代码。
标签: string pcre regex-alternation