我有这个正则表达式:^\/\*
来查看文件是否在开头包含这两个字符。我正在迭代许多c ++源文件,试图看看它们包含哪些。问题是,如果文件包含这个:
#include <source.h>
/* this is a comment */
这也匹配正则表达式。我不明白为什么,因为正则表达式没有多行标志。
以下是正则表达式的代码:
multi = /^\/\*/
为什么这只匹配在文本的开头?这基本上就是我正在做的一切:
data = File.read(filename)
if data =~ multi
puts "file starts with multiline header"
end
答案 0 :(得分:5)
在每个换行符后的Ruby ^
匹配中。使用\A
仅匹配整个字符串的开头:
multi = /\A\/\*/
答案 1 :(得分:3)
使用\A
(字符串的开头)代替^
(行首)。
^
的解释在口味之间并不完全一致。有时您需要为多行字符串设置模式修饰符,但并非总是如此。 \A
是一致的(虽然不是所有版本都可用,但大多数都是。例外是XML,POSIX ERE / BRE和其他一些)。
答案 2 :(得分:1)
为什么要使用正则表达式?
multi = "/*"
data = File.read(filename)
if data[0..2] == multi
puts "file starts with multiline header"
end
答案 3 :(得分:0)
我不知道红宝石内部,但试试这个:
/ ^ [^ A-ZA-Z#&LT;&GT;] / * /
第一部分确保在您的多行注释之前找不到任何有效字符。 请注意,[^ a-zA-Z#&lt;&gt;]只是一个示例,您应该使用有效组合来完成它。