我们有一个非常复杂的正则表达式来检查字符串结构。
我想知道是否有一种简单的方法可以找出导致正则表达式不匹配的字符串中的哪个字符。
例如,
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 自动生成其中之一如果您有一个特别难解决的表达式。
关于ruby - 如何获取导致正则表达式不匹配的第一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30401435/