0

次の例のように、いくつかのコードを含む文字列 (例: «USER_ID#USERNAME#STATUS») を置換用に使用しています。

«USER_ID#USERNAME#STATUS» さん、こんにちは、«PROD_ID#PRODNAME#STATUS» はいかがですか?

将来の交換のために、すべてのコードを取得する方法を見つける必要があります。

この正規表現で 1 つのコードを簡単に見つけることができます。

/«(.*)#(.*)#(.*)»/ 

しかし、preg_match_all ですべてのコードを取得する方法が見つかりません。

誰かが私を助けることができますか?私はPHPを使用しています。

ありがとう

4

3 に答える 3

3

パターンを非貪欲にする必要があります。

/«(.*?)#(.*?)#(.*?)»/

これを参照してください。

于 2010-08-19T14:57:48.483 に答える
2
$string = "Hello «USER_ID#USERNAME#STATUS», do you like «PROD_ID#PRODNAME#STATUS»?";

preg_match_all('/«(.*)#(.*)#(.*)»/U',$string,$matches);

echo '<pre>';
var_dump($matches);
echo '</pre>';

与える

array(4) {
  [0]=>
  array(2) {
    [0]=>
    string(25) "«USER_ID#USERNAME#STATUS»"
    [1]=>
    string(25) "«PROD_ID#PRODNAME#STATUS»"
  }
  [1]=>
  array(2) {
    [0]=>
    string(7) "USER_ID"
    [1]=>
    string(7) "PROD_ID"
  }
  [2]=>
  array(2) {
    [0]=>
    string(8) "USERNAME"
    [1]=>
    string(8) "PRODNAME"
  }
  [3]=>
  array(2) {
    [0]=>
    string(6) "STATUS"
    [1]=>
    string(6) "STATUS"
  }
}

Ungreedy スイッチの使用に注意してください。

誰かがすぐに正規表現を変更して、本質的に貪欲にならないようにするだろうと確信しています。

于 2010-08-19T14:59:23.160 に答える
0

試す

preg_match_all('/«(?<id>.*?)#(?<username>.*?)#(?<status>.*?)»/',$string,$matches);
echo $matches[0]['username'];

//And dont forget you have to loop.
foreach($matches as $match)
{
    echo $match['username'];
}

:)

array(7) {
  [0]=>
  array(2) {
    [0]=>
    string(27) "«USER_ID#USERNAME#STATUS»"
    [1]=>
    string(27) "«PROD_ID#PRODNAME#STATUS»"
  }
  ["id"]=>
  array(2) {
    [0]=>
    string(7) "USER_ID"
    [1]=>
    string(7) "PROD_ID"
  }
  [1]=>
  array(2) {
    [0]=>
    string(7) "USER_ID"
    [1]=>
    string(7) "PROD_ID"
  }
  ["username"]=>
  array(2) {
    [0]=>
    string(8) "USERNAME"
    [1]=>
    string(8) "PRODNAME"
  }
  [2]=>
  array(2) {
    [0]=>
    string(8) "USERNAME"
    [1]=>
    string(8) "PRODNAME"
  }
  ["status"]=>
  array(2) {
    [0]=>
    string(6) "STATUS"
    [1]=>
    string(6) "STATUS"
  }
  [3]=>
  array(2) {
    [0]=>
    string(6) "STATUS"
    [1]=>
    string(6) "STATUS"
  }
}
于 2010-08-19T14:57:06.393 に答える