0

我需要捕获我的字符串的 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';
4

3 回答 3

5

为此,您将希望在多行模式下使用正则表达式,因此您将使用m 修饰符,并查看整行数据。

首先,我们查找行首和行首所需的数据:

^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]);

看到它工作

于 2013-04-19T15:04:38.123 回答
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 />";
    }
}

演示:http: //ideone.com/BQIfkY

于 2013-04-19T15:07:41.290 回答
1

我把这个 -> 改成$arrayst = explode(" ", $string);了这个 ->$arrayst = explode("\n", $string);因为在你的字符串中也有\n(换行符),这只是我的意见,但你应该在每一行之后加上\n(换行符)

于 2013-04-19T15:05:03.657 回答