繁体   English   中英

Ruby Regexp字符类带有换行符,为什么不匹配?

[英]Ruby Regexp character class with new line, why not match?

我想使用此正则表达式来匹配字符串中的任何块注释(c样式)。 但是为什么下面没有呢?

rblockcmt = Regexp.new "/\\*[.\s]*?\\*/"  # match block comment
p rblockcmt=~"/* 22/Nov - add fee update */"

==> nil 

除了Swoveland爵士张贴的内容外,还有一个. 匹配除换行符以外的任何字符:

以下元字符的行为也类似于字符类:

/./除换行符外的任何字符。

https://ruby-doc.org/core-2.3.0/Regexp.html

如果需要的话. 要匹配换行符,可以指定m标志,例如/.*?/m

选项

正则表达式的结束定界符后可以跟一个或多个单字母选项,这些选项控制模式的匹配方式。

/pat/i忽略大小写
/pat/m将换行符视为与匹配的字符.
...

https://ruby-doc.org/core-2.3.0/Regexp.html

因为有例外/怪癖(例如换行符)不匹配. 可能会很痛苦,有些人为他们编写的每个正则表达式指定了m选项。

您似乎打算[.\\s]*? 懒惰地匹配零个或多个字符或空格。 首先,空格是字符,因此您不需要\\s 这简化了您对[.]*?表达[.]*? 其次,如果您要匹配任何字符,则不需要字符类,只需编写即可. 第三, 也是最重要的是 ,字符类中的句点就是字符"."

你想要.*? (或[^*]* )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM