Regex 代码格式-缓解难以理解的大型正则表达式的方法?
我使用的是一个很长的正则表达式,如果你没有在前5分钟内编写它,这是很难理解的-Regex 代码格式-缓解难以理解的大型正则表达式的方法?,regex,coding-style,code-formatting,Regex,Coding Style,Code Formatting,我使用的是一个很长的正则表达式,如果你没有在前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]+) \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"
请参阅:您可以使用以下内容:
class Regexp
def +(re)
Regexp.new self.source + re.source
end
end
要启用“+”运算符连接正则表达式,请执行以下操作:
/([^\s]+)/ + # Comment
/\s*[^\[]+\[([^\]]+)/ + # Comment
/\]\s*"([^\s]+)/ + # Comment
/\s*([^\s]+)/ + # Comment
/\s*([^"]+)/ + # Comment
/"\s*([^\s]+)/ + # Comment
/\s*([^\s]+)/ + # Comment
/\s*"([^"]+)/ + # Comment
/"\s*"([^"]+)"/ # Comment
正如其他人所发布的,我通常将标志设置为忽略模式空白。 除了允许多行正则表达式和注释外,它还允许您通过逻辑分组或函数分隔正则表达式 例如:
/([^\s]+)
\s* [^\[]+ \[ ( [^\]]+) \]
\s* " ( [^\s]+) \s* ([^\s]+) \s* ([^"]+) "
\s* ( [^\s]+) \s* ([^\s]+)
\s* " ( [^"]+ ) "
\s* " ( [^"]+ ) "/
结构可以改变世界,有时甚至比评论更重要。在为可读性而写作时,我认为表达式的布局应该与表达式本身一样反映其目的。否则,无论你的评论如何,读起来都会很痛苦
对于您继承的表达式,这样做也会很有帮助,因为事情真的会突然发生在您身上。(例如,在我创建了上面的代码之前,我不知道您正在配对引号或括号)严格来说并不是在寻找Ruby答案,但这样就可以了:)忽略空白的
x
标志应该适用于大多数所有的正则表达式引擎。e、 g.perl: