我试图在分隔符后用PHP和preg_match得到一行字符串结束。这是我的代码:在分隔符后面获取字符串到行尾
<?php
$stringa = <<<EOT
var1=Ciao
var2=Variabile
var3=We
EOT;
preg_match("#var2=(.*?)\n#", $stringa, $boh);
print_r($boh);
?>
这个作品,但不是最后一行,如果我在正则表达式替换VAR2与VAR3生成的数组将为空。
我试图在分隔符后用PHP和preg_match得到一行字符串结束。这是我的代码:在分隔符后面获取字符串到行尾
<?php
$stringa = <<<EOT
var1=Ciao
var2=Variabile
var3=We
EOT;
preg_match("#var2=(.*?)\n#", $stringa, $boh);
print_r($boh);
?>
这个作品,但不是最后一行,如果我在正则表达式替换VAR2与VAR3生成的数组将为空。
使用交替:
#var2=(.*?)(\n|$)#
^^^^
+1,尼斯干净的解决方案。 – naththedeveloper
谢谢,在我用这个版本之前,用[\ n | $]代替(\ n | $),我的不好! – Grork
的原因是,你需要一个换行符后的 “我们”,以正确地匹配:
<?php
$stringa = <<<EOT
var1=Ciao
var2=Variabile
var3=We
EOT;
preg_match("#var3=(.*?)\n#", $stringa, $boh);
print_r($boh);
?>
因为“EOT”出现在下面的行中,所以在“We”之后是否已经存在'\ n'?你是说,如果在最后有两个连续的'\ n's,正则表达式才会起作用? –
用于将EOT放在单独行上的换行符不会将其放入字符串中。 –
啊,谢谢。我想这是有道理的,因为如果没有换行结束,没有办法终止字符串。 –
使用多行模式下,m
改性剂,以便$
匹配换行符或字符串的结尾:
preg_match('#var2=(.*?)$#m', $stringa, $boh);
而不是使用点,你可以使用[^\n]
是排除所有换行符:(。*?)?
preg_match('~(?<=var3=)[^\n]+~', $stringa, $boh);
有人能解释'问号的语义'我知道''意思是“可选”,如'{0,1}'或'(xxx |)'中所示,但是我从来没有在'*'后面看到它。它是否适用于'。*'的整个表达式?如果是这样,是不是多余的,因为'*'可以匹配0次? –
@PeterAlfvin - '?'可以跟随任何量词来量化_non-greedy_。 (可以查找术语。)简而言之,它指示量词匹配_尽可能少的实例_(而不是_as尽可能多的实例,这是默认行为)。例如,'*?','+?','??','{2,5}?',都是相应量词的非贪婪版本。 –
@ acheong87 - 谢谢! –