所以我正在尝试为这个字符串编写正则表达式:
changed 55 (test)
所以基本上每当我们的系统上的项目被更改时,他们的名字就会变为
changed ID (NAME)
我想使用preg_match来获取项目的名称。
所以如果字符串是
changed 1000 (Jesus)
我希望能够得到耶稣
如果字符串是
changed 9000 (Dicaprio)
我希望能够得到Dicaprio
我该怎么做?
问题是名称可以是)()Dicaprio
所以如果它改为
changed 32 ()()Dicaprio)
我仍然需要回来“)()Dicaprio”(没有引号)
答案 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
)
答案 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]
来获取名称;)