为什么这个正则表达式不能正常工作?

时间:2009-11-16 12:51:12

标签: ruby regex

我有这个正则表达式:^\/\*来查看文件是否在开头包含这两个字符。我正在迭代许多c ++源文件,试图看看它们包含哪些。问题是,如果文件包含这个:

#include <source.h>

/* this is a comment */

这也匹配正则表达式。我不明白为什么,因为正则表达式没有多行标志。

以下是正则表达式的代码:

multi = /^\/\*/

为什么这只匹配在文本的开头?这基本上就是我正在做的一切:

data = File.read(filename)
if data =~ multi
   puts "file starts with multiline header"
end

4 个答案:

答案 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;]只是一个示例,您应该使用有效组合来完成它。