使用正则表达式在括号内获取文本

时间:2013-10-28 21:54:07

标签: php regex

所以我正在尝试为这个字符串编写正则表达式:

changed 55 (test)

所以基本上每当我们的系统上的项目被更改时,他们的名字就会变为

changed ID (NAME)

我想使用preg_match来获取项目的名称。

所以如果字符串是

changed 1000 (Jesus)

我希望能够得到耶稣

如果字符串是

changed 9000 (Dicaprio)

我希望能够得到Dicaprio

我该怎么做?

问题是名称可以是)()Dicaprio

所以如果它改为

changed 32 ()()Dicaprio)

我仍然需要回来“)()Dicaprio”(没有引号)

4 个答案:

答案 0 :(得分: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"
}

答案 1 :(得分:1)

试试这个:

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

编辑:好的,你需要这个:

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

答案 2 :(得分:1)

输入:'改变了1000(耶稣)'

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

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

演示:http://www.phpliveregex.com/p/1JZ

答案 3 :(得分:1)

以下是php.net documentation of preg_match的摘录:

  

如果提供了匹配,那么它将填充搜索结果。 $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]来获取名称;)