PHP正则表达式多行

时间:2011-01-24 03:30:34

标签: php regex multiline

我有以下PHP正则表达式

preg_match('/[\/\/\*] First: (.*)\n[\/\/\*] Second: (.*)\n/i', $some_string)

但由于某种原因,它与此文本不符:

// First: a string
// Second: another string

我尝试更改Windows和Unix风格之间的行结尾,这没有做任何事情。我也尝试将正则表达式分开来分别匹配First和Second;这有效,但当我把它们放在一起时,它们不再匹配示例文本。它似乎与第二个[\/\/\*]之后的空间有关...任何想法?

注意我不能改变正则表达式;这是我反驳的客户端代码,因为它们不提供文档。此代码在PHP文件中查找某些模式,以便将它们作为“插件”加载到其产品中。我真的想猜测我需要添加到这些PHP文件的标题,以便将它们正确地识别为插件。

3 个答案:

答案 0 :(得分:2)

尝试:

preg_match('~// First: (.*)\n// Second: (.*)~i', $str);

See it

为什么你的正则表达式错了?

[\/\/\*]是一个与/*匹配的字符类。

但是你似乎在字符串的开头有//,所以你永远不会获得匹配。

我目前的正则表达式匹配什么字符串?

将当前输入更改为开头为/,第二行后为换行符:

$some_string =
'/ First: a string
/ Second: another string
';

See it

答案 1 :(得分:2)

$some_string = <<<STR
// First: a string
// Second: another string

STR;

$match = preg_match('`// First: (.*)\n// Second: (.*)\n`i', $some_string);

echo $match;

刚试过这个,它有效。你确定第二行之后有换行符吗?

答案 2 :(得分:0)

(代表OP发布)

答案:

我试图猜测这匹配的模式。结果是这样:

\ (x, y) -> (x, 1 / y)