ruby - 如何获取导致正则表达式不匹配的第一个字符

标签 ruby regex

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

我想知道是否有一种简单的方法可以找出导致正则表达式不匹配的字符串中的哪个字符。

例如,

 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/

相关文章:

mysql - 如果正在保存的记录具有相同的 key ,如何更新现有记录?

regex - perl中qr打印结果的含义

java - 我将如何在 ColdFusion(或 Java)中实现这个正则表达式?

java - 在 Ruby 中自动进行类级初始化

ruby - 如何生成六种随机的十六进制颜色并将它们放入 Ruby 数组中?

ruby-on-rails - 错误 : Nil Can't be Coerced into a Fixnum

ruby-on-rails - Rails、Rake、将文件夹移动到新位置

javascript - 带有特殊字符 (.) 的正则表达式字边界 javascript

Javascript 正则表达式密码验证

正则表达式不适用于 Perl 中的特定特殊字符