我使用的是很长的正则表达式,如果您在前5分钟内未写过,那么很难理解-

"/([^\s]+)\s*[^\[]+\[([^\]]+)\]\s*"([^\s]+)\s*([^\s]+)\s*([^"]+)"\s*([^\s]+)\s*([^\s]+)         \s*"([^"]+)"\s*"([^"]+)"/

是否存在一种常用的格式化代码中长正则表达式的方式来提高可读性?

我想将每个捕获组放在自己的行上,例如
          /([^\s]+)
\s*[^\[]+\[([^\]]+)
     \]\s*"([^\s]+)
        \s*([^\s]+)
         \s*([^"]+)
       "\s*([^\s]+)
        \s*([^\s]+)
        \s*"([^"]+)
       "\s*"([^"]+)"/

如果我可以在正则表达式的每个部分上逐行添加注释,那将非常好,但是Ruby不会允许我这样做。

我对使用大正则表达式的一般问题更感兴趣,而不是使用更好的方式来解析文本……这个特殊情况只是我在学习一些Ruby的同时进行的一项练习。

最佳答案

只需使用x标志(这意味着忽略空格)。

然后您也可以发表评论。参见示例:

          /([^\s]+) #Matches 1+ not whitespace.
\s*[^\[]+\[([^\]]+) #Matches 0+whitespace and an open bracket "["
     \]\s*"([^\s]+) #Matches a closing brack, space and and an open ", and some text
        \s*([^\s]+) #Matches
         \s*([^"]+)
       "\s*([^\s]+)
        \s*([^\s]+)
        \s*"([^"]+)
       "\s*"([^"]+)"/x =~ 'ss[s] "ss" " " dd dd "sdf" "  df"sdfasdf'

print Regexp.last_match  #=> ss[s] "ss" " " dd dd "sdf" "  df"

另请:http://codepad.org/PDSxQUQf

关于regex - 代码格式化-减轻无法理解的大正则表达式的方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6737543/

10-09 07:34
查看更多