-1

次の文字列を指定します。

  • [ダウンロードID="1"]
  • [ダウンロード ID="1" 属性=""]
  • [ダウンロード属性="" id="1"]
  • [attr="" id="1" attr="" をダウンロード]

ID は常に数字です。PHP経由で使用される数値を常に提供する正規表現が必要です。

4

6 に答える 6

1
preg_match_all('/id="(\d+)"/', $data, $matches);
于 2012-06-25T06:19:07.913 に答える
0

これが私の解決策です:

<?php

    $content =
<<<TEST
[download id="1"]
[download id="2" attr=""]
[download attr="" id="3"]
[download attr="" id="4" attr=""]
TEST;

    $pattern = '/\[download.*[ ]+id="(?P<id>[0-9]+)".*\]/u';

    if (preg_match_all($pattern, $content, $matches))
        var_dump($matches);

?>

単一行の入力($ matches ['id'] [0]で読み取る)または複数行の入力(例のように、 $ matches ['id']配列で反復する)で機能します。

ノート:

  • 開始^および終了$区切り文字でpreg_matchを使用せず、代わりに区切り文字なしでpreg_match_allを使用してください
  • 「s」PCRE_DOTALL修飾子は使用しないでください
  • 正規表現を「ダウンロード」または「ダウンロード」の両方で機能させる場合は、「i」修飾子を使用します
  • 入力がUTF-8でエンコードされた文字列の場合は、「u」修飾子を使用します

http://it.php.net/manual/en/function.preg-match-all.php

http://it.php.net/manual/en/reference.pcre.pattern.modifiers.php

上記の例はこれを出力します:

array(3) {
  [0]=>
  array(4) {
    [0]=>
    string(17) "[download id="1"]"
    [1]=>
    string(25) "[download id="2" attr=""]"
    [2]=>
    string(25) "[download attr="" id="3"]"
    [3]=>
    string(33) "[download attr="" id="4" attr=""]"
  }
  ["id"]=>
  array(4) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
    [2]=>
    string(1) "3"
    [3]=>
    string(1) "4"
  }
  [1]=>
  array(4) {
    [0]=>
    string(1) "1"
    [1]=>
    string(1) "2"
    [2]=>
    string(1) "3"
    [3]=>
    string(1) "4"
  }
}

したがって、 $matches['id']配列でループしているID属性を読み取ることができます:)

于 2012-06-25T12:48:04.480 に答える
0

これを試してください:

/\[download.*?id=\"(\d+)\"/

呼び出された関数:

preg_match_all('/\[download.*?id=\"(\d+)\"/', '{{your data}}', $arr, PREG_PATTERN_ORDER);
于 2012-06-25T06:18:25.813 に答える
0

id常に 1 つのフィールドがあり、常に引用符 ( ) で囲まれていると仮定すると、次"のような正規表現を試すことができますid="(\d+)"。これにより、番号がキャプチャされ、グループに入れられます。これらのグループにアクセスする方法については、こちらをご覧ください。

提案されているように、より多くのフィールドに一致させたい場合は、正規表現を削除して、渡す文字列を解析できるものを見つけることをお勧めします。

于 2012-06-25T06:19:12.313 に答える
0

これも解決策でしょう

\[download[^\]]*id="(\d*)

グループ1をキャプチャすることで結果が得られます

ここでRegexrを参照してください

\[download「[ダウンロード」に一致

[^\]]*否定された文字クラスで、"]" 以外のすべてに一致します (o 回以上)

id="文字通り「id="」に一致

(\d*)は 0 以上の数字に一致するキャプチャ グループです。1 つ以上に一致*するように を aに変更できます。+

すべてのプログラマーが正規表現について絶対に知っておくべきこと

于 2012-06-25T06:22:38.953 に答える
0

必要に応じて正規表現ではなく、簡単にiniファイルを使用できます。次に例を示します。

test.ini

[download]
id=1
attr = ""
[download2]
id=2
attr = "d2"

およびindex.php

$ini = parse_ini_file('test.ini', true);
print_r($ini);
于 2012-06-25T06:30:15.787 に答える