preg_match和新行符号

时间:2012-11-10 16:30:32

标签: php regex multiline

我有以下字符串

№ покупки(OrderId) : 12345
Доп.Информация 1 : Имя
Доп.Информация 2 : Уставная деятельность

我想抓住以Доп.Информация 1开头的行。

这个有效:

Доп\.Информация 1\W*:\W*(\w*)

这个没有:

^Доп\.Информация 1\W*:\W*(\w*)$

只有这一个有效:

^№

怎么了?据我所知,^符号不仅用于搜索字符串本身的开头,还用于\n符号之后。

2 个答案:

答案 0 :(得分:2)

我建议使用多行模式/m,因此^$将适用于每一行文字。

/^.* 1 : .*$/m

其他选择是:

/(?:^|(?<=\n)).* 1 : .*/

其中(?:^|(?<=\n))匹配行的开头。

答案 1 :(得分:1)

仅当您使用多线模式时。您可以像这样激活它:

'/^Доп\.Информация 1\W*:\W*(\w*)$/m'

只需将它放在分隔符后面(无论你使用哪个字符)。文档的This part显示了如何使用这些修饰符。

或者可以在正则表达式中设置这些选项,甚至只为它的各个部分设置(尽管在您的情况下可能不需要)。以下是它的工作原理:

'/(?m:^Доп\.Информация 1\W*:\W*(\w*)$)/'

或者您可以像这样在某一点设置修改器:

'/(?m)^Доп\.Информация 1\W*:\W*(\w*)$/'

对于此样式,请查看文档的this bit