如何在php正则表达式中逐行匹配字符串


How to match a string line by line in php regex?

我有一个带有多个换行符的字符串,每一个换行符都包含一个新的子字符串。

下面是一个有2行的字符串示例:

 $x="Hello
       World!

您可以看到你好在第一行,世界在换行符中。

每个子字符串的开头和结尾都有换行符|空格。

我想把这两行都匹配起来。

我的curunt代码与第二行匹配,忽略了第一行。

 if(preg_match_all("/^'n*'s*(Hello|World!)'s*$/i",$x,$m))
 {print_r($m);}

有没有办法解决这个问题,这样两条线都可以匹配?

if(preg_match_all("/(Hello|World!)/i",$x,$m))
{
 print_r($m);
}

如果您使用^$,它只匹配整行。所以Hello部分在Hello之前没有''n**s*,所以它不匹配。如果你像上面那样更改脚本,它只会查找单词,而不会在单词之前或之后有任何内容。

希望能有所帮助。

试试这个

 $x="Hello    
 world! ";
preg_match_all("#'b(Hello|World!)'b#",$x,$m) ;
echo count($m)

输出

2

Phpfiddle预览

我不确定"目标"是什么,但这个正则表达式将匹配这两行。我将Hello|World更改为(.+?),因为它匹配任何字符,因此如果您正在分析代码,也会匹配变量。

/^(.+?)['n,'s,'t]{1,8}(.+?)$/

这是你使用新正则表达式的例子,所以如果我误解了,你可以看到发生了什么

<?php 
 $x="Hello
      World!";
 if(preg_match_all("/^(.+?)['n,'s,'t]{1,8}(.+?)$/i",$x,$m))
 {print_r($m);}
?>

如果解析多个序列,则需要确定第一行和第二行之间的潜在字符数,然后修改{1,8}以适应空格、制表符、换行符等。