我有一个reqular表达式,用于从字符串中获取子字符串,如果某个特定字符串不存在,则尝试获取另一个子字符串。
我正在尝试的Reqular表达式是:
\@\s*\((.*?)\)|\((.*?)\)
但是这不起作用,并且总是得到第二个选项子字符串而不是第一个选项。
示例字符串是
一些文本(第二个子串)@(第一个子串)
它给了我这个结果:
Array
(
[0] => (2nd Sub-string)
[1] =>
[2] => 2nd Sub-string
)
答案 0 :(得分:1)
为什么不简单地获取两个字符串(正则表达式正常工作)并以编程方式检查它们的存在?类似的东西:
$num = preg_match_all(
"/\@\s*\((.*?)\)|\((.*?)\)/",
"some text (2nd Sub-string) @ (First sub-string)",
$matches, PREG_SET_ORDER
);
var_dump($num, $matches);
if($num < 2)
{
// no second match, read first
}
if(!array_key_exists(2, $matches[1]))
{
// another way to put it
}
HTH。