-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(见在线@ 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

输入:'changed 1000 (Jesus)'

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 回答