我有一个带有多个换行符的字符串,每一个换行符都包含一个新的子字符串。
下面是一个有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}以适应空格、制表符、换行符等。