如何获得导致reg表达式不匹配的第一个字符

时间:2015-05-22 16:13:38

标签: ruby regex

我们有一个非常复杂的正则表达式来检查字符串结构。

我想知道是否有一种简单的方法可以找出字符串中哪个字符导致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}])?$

1 个答案:

答案 0 :(得分:7)

简短的回答是:

长的答案是正则表达式是一个复杂的有限状态机,可能处于试图同时匹配几个不同的可能路径的状态。如果没有构建允许部分匹配的正则表达式,就无法从正则表达式中获得部分匹配。

如果要允许部分匹配,请重新设计表达式以支持它们,或者使用更手动的方法编写一个遍历字符串的解析器。

如果您有一个特别难以解决的表达式,您可以尝试使用Ragel自动生成其中一个。