【发布时间】:2015-07-06 23:54:08
【问题描述】:
我有一个关于正则表达式的问题
这是我的字符串...
cook, eat, write, play
在我之前做的很多正则表达式中,我总是使用( ) 来引用空格,我知道我应该避免使用\s 来引用空格,因为它包括回车、换行等,但是你为什么要引用在下面的这个正则表达式中使用[ ] 空格?
(^)?(?:,[ ])?write(?(1),[ ])
我尝试将其中的[ ] 替换为( ),就像这样...
(^)?(?:,( ))?write(?(1),( ))
但是如果我这样做了,正则表达式就不再起作用了,这是为什么呢?
为什么您可以在某些正则表达式中使用( ) 来引用空间,以及为什么在上面的这个正则表达式示例中不能这样做?
【问题讨论】:
-
在其中一个正则表达式站点上尝试表达式。他们对表达式中的所有内容进行了解释。 regex101.com
[]是一个字符类。()是一个捕获组。字符类允许字符在里面;捕获组捕获内部的值。 -
如果您开启了 ignore whitespace 标志,
( )之间的空格将被忽略,而在任何模式下,[ ]中的空格永远不会被忽略。 -
谢谢大家,@sln 你是如何激活ignore whitspace flag 的?我已经查看了这个链接msdn.microsoft.com/en-us/library/yd1hzczs(v=vs.110).aspx,我通过执行
(?m)来启用多行,并通过执行(?s)来启用单行,但是如何启用ignorewhitspace?输入这个(?x)???谢谢高级。 -
它只是 IgnorePatternWhitespace。然后你可以在代码中使用格式化的多行表达式(就像我的帖子一样)。便于阅读/维护。我很确定您可以使用内联
(?x)修饰符,但它应该是"代码字符串分隔符之后的第一个构造。如果您使用忽略空格,请记住任何自然空格必须被转义或在一个类中(即[ ]或\)。我建议使用regexformat 来格式化和压缩正则表达式,因为它会自动处理这个问题。