0

以下の結果を取得しようとしていますが、できません。誰かが私にアイデアをくれますか?

私のタラ:

$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 />";
    }
}

期待される結果:

1: 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

2: ZAMM tincidunt cursus eu amet nunc ZAMM c ac nunc, et pid pellentesque amet,                   ZSSS m urna scelerisque in vut

3: ZAMM c ac nunc, et pid pellentesque amet,                   ZSSS m urna scelerisque in vut
4

3 に答える 3

1
/ZAMM(.(?!ZAMM))*/

ZAMMが続かない次のすべての文字を取ります。これは、否定先読みと呼ばれます。

于 2013-04-19T21:38:19.903 に答える
1

この種のことには、先読みを使用する必要があります。必要なパターンは次のようになります。

/ZAMM.*?(?=(ZAMM|$))/

ここから、正規表現が複雑になり始めます。アイデアは、文字列を照合するだけでなく、文字列を先読みして一致の終点を見つけることです。これおよびその他の高度な正規表現構文について詳しくは、http: //www.regular-expressions.info/refadv.htmlをご覧ください。

.*また、疑問符を追加して、既存のものを「貪欲でない」パターンにする必要があります。そうしないと、最初の一致で文字列の最後まで進みます(すでに行っているように)。

それが役立つことを願っています。

于 2013-04-19T21:44:17.637 に答える