我们有一个非常复杂的正则表达式,用于检查字符串结构。
我想知道是否有一种简单的方法来找出导致reg表达式不匹配的字符串中的哪个字符。
例如,
string.match(reg_exp).get_position_which_fails
基本上,这个想法是当状态机放弃时如何获得状态机的“位置”。
这是一个正则表达式示例:
%q^[^\p{Cc}\p{Z}]([^\p{Cc}\p{Zl}\p{Zp}]{0,253}[^\p{Cc}\p{Z}])?$
简短的答案是:不。
长答案是正则表达式是一个复杂的有限状态机,可能处于试图同时匹配多个不同可能路径的状态。如果不构造允许部分匹配的正则表达式,则无法从正则表达式中获得部分匹配。
如果要允许部分匹配,请重新设计您的表达式以支持它们,或者使用更手动的方法编写一个解析器以逐步遍历字符串。
如果您要解决的表达式特别困难,可以尝试使用Ragel自动生成其中之一。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句