-2

だから私はこの文字列の正規表現を書こうとしています:

changed 55 (test)

したがって、基本的に、システムでアイテムが変更されるたびに、その名前が次のように変更されます

changed ID (NAME)

preg_match を使用してアイテムの名前を取得したいと思います。

したがって、文字列が

changed 1000 (Jesus)

イエスを手に入れたい

文字列が

changed 9000 (Dicaprio)

ディカプリオを手に入れたい

どうやってやるの?

問題は、名前が )()Dicaprio になる可能性があることです

そのため、変更された場合

changed 32 ()()Dicaprio)

私はまだ ")()Dicaprio" を返す必要があります (引用符なし)

4

4 に答える 4

2

次の正規表現を使用します。

/changed (\d+) \((.*)\)/
                  ^^----- Contents within the parentheses
                ^-----^-- outer parentheses

         ^^^^^----------- The number

<?php

$subject = 'changed 32 ()()Dicaprio)';
$pattern = '/changed (\d+) \((.*)\)/';

preg_match($pattern, $subject, $matches);
var_dump($matches);

出力)()Dicaprio( online @ eval.inを参照):

array(3) {
  [0]=>
  string(24) "changed 32 ()()Dicaprio)"
  [1]=>
  string(2) "32"
  [2]=>
  string(11) ")()Dicaprio"
}
于 2013-10-28T22:00:12.310 に答える
1

これを試して:

$text = 'changed 9000 (Dicaprio)';
preg_match('/\(([^)]+)\)/', $text, $aryMatches);
echo $aryMatches[1];

編集:さて、代わりにこれが必要です:

$text = 'changed 9000 ()()Dicaprio)';
preg_match('/\((.+)\)/', $text, $aryMatches);
echo $aryMatches[1];
于 2013-10-28T21:56:57.630 に答える
1

入力: '変更された 1000 (イエス)'

preg_match("/changed .* \((.*)\)/i", $input_line, $output_array);

Array
(
    [0] => changed 1000 (Jesus)
    [1] => Jesus
)

デモ: http://www.phpliveregex.com/p/1JZ

于 2013-10-28T22:00:25.867 に答える
1

preg_match の php.net ドキュメントの抜粋を次に示します。

一致が提供された場合は、検索結果が入力されます。$matches[0]完全なパターンに一致したテキストが含まれ、$matches[1]最初にキャプチャされた括弧で囲まれたサブパターンに一致したテキストが含まれます。

例 :

[neumann@MacBookPro ~]$ cat test.php 
#!/usr/bin/php
<?php
    $str = "changed 1000 (Dicaprio)";
    $pattern = "/changed [0-9]+ \(([A-Za-z]+)\)/";
    $result = array();

    preg_match($pattern, $str, $result);
    var_dump($result);
?>

[neumann@MacBookPro ~]$ ./test.php 
array(2) {
  [0]=>
  string(23) "changed 1000 (Dicaprio)"
  [1]=>
  string(8) "Dicaprio"
}

したがって、名前を取得するために使用できます$result[1];)

于 2013-10-28T22:01:13.503 に答える