我需要捕获字符串的ZAMM记录。 当你有空间时,我无法捕获属于它的数据。
我的字符串:
$string ='ZAMM Et a est hac pid pid sit amet, lacus nisi
ZPPP scelerisque sagittis montes, porttitor ut arcu
ZAMM tincidunt cursus eu amet nunc
ZAMM c ac nunc, et pid pellentesque amet,
ZSSS m urna scelerisque in vut';
预期回报:
ZAMM Et a est hac pid pid sit amet, lacus nisi
ZAMM tincidunt cursus eu amet nunc
ZAMM c ac nunc, et pid pellentesque amet,
我正在使用:
$arrayst = explode(" ", $string);
foreach($arrayst as $stringit) {
if(preg_match("/ZAMM.*/", $stringit, $matches)) {
echo $stringit;
echo "<br />";
}
}
// Return:
ZAMM
arcu ZAMM
nunc ZAMM
我使用错误的正则表达式?
编辑:最后一个问题。 如果我的字符串是这样的:
$string ='ZAMM Et a est hac pid pid sit amet, lacus nisi ZPPP scelerisque sagittis montes, porttitor ut arcu ZAMM tincidunt cursus eu amet nunc ZAMM c ac nunc, et pid pellentesque amet, ZSSS m urna scelerisque in vut';
答案 0 :(得分:5)
为此,您需要在多行模式下使用正则表达式,因此您可以使用m
modifier,并查看整行数据。
首先,我们在行的开头查找行的开头和所需的数据:
^ZAMM
...然后我们会查找不是新行的任何数据:
.+
我们可以在这里使用.
因为它与新行不匹配,除非您还指定了s
修饰符,我们不会这样做。接下来我们断言一行:
$
把所有这些放在一起,你得到:
/^ZAMM.+$/m
在PHP中使用它:
$string ='ZAMM Et a est hac pid pid sit amet, lacus nisi
ZPPP scelerisque sagittis montes, porttitor ut arcu
ZAMM tincidunt cursus eu amet nunc
ZAMM c ac nunc, et pid pellentesque amet,
ZSSS m urna scelerisque in vut';
preg_match_all('/^ZAMM.+$/m', $string, $matches);
print_r($matches[0]);
答案 1 :(得分:2)
问题不在于你的正则表达式,而在于你的explode(" ", $string)
。执行此操作时,您将字符串拆分为单词数组。你不希望这样!您希望正则表达式对整个字符串进行操作,而不是对每个单词进行操作。
实际上,你想要的是在你的字符串中每行操作的正则表达式。
$string ='ZAMM Et a est hac pid pid sit amet, lacus nisi
ZPPP scelerisque sagittis montes, porttitor ut arcu
ZAMM tincidunt cursus eu amet nunc
ZAMM c ac nunc, et pid pellentesque amet,
ZSSS m urna scelerisque in vut';
if(preg_match_all("/ZAMM.*/", $string, $matches)) {
foreach($matches[0] as $match){
echo $match;
echo "<br />";
}
}
答案 2 :(得分:1)
我改变了这个 - &gt; $arrayst = explode(" ", $string);
到此 - &gt; $arrayst = explode("\n", $string);
因为在你的字符串中还有\n
(换行符),这只是我的看法,但你应该放在每行\n
之后(换行符)