php正则表达式匹配模式

时间:2011-03-14 22:01:01

标签: php regex

我使用以下正则表达式匹配下面的字符串,到目前为止一切顺利。现在,我怎样才能使BAZ的内容可选,以便与BAZ()

的情况相匹配
$str = '- 10 TEST (FOO 3 TEST.BAR 213 BAZ (\HELLO) TEST';

preg_match('/FOO (\d+).+BAR (\d+).+BAZ \(\\\\(\w+)\)/i', $str, $match);

$str = '- 10 TEST (FOO 3 TEST.BAR 213 BAZ () TEST';
$array = array(
    'FOO' => 3,
    'BAR' => 213,
    'BAZ' => 
);

2 个答案:

答案 0 :(得分:1)

要使某些内容可选,您可以将其放入非捕获组(?: ... ),然后在该组之后放置一个问号。问号是一个量词,意思是“零或一”。

换句话说,改变这个:

\\\\(\w+)

到此:

(?:\\\\(\w+))?

所以整个表达式变成:

/FOO (\d+).+BAR (\d+).+BAZ \((?:\\\\(\w+))?\)/i

答案 1 :(得分:1)

听起来您只想将整个事物包装在非捕获组中并添加?运算符。

/FOO (\d+).+BAR (\d+).+BAZ (?:\(\\\\(\w+)\))?/i

请注意,这会捕获BAZ后没有括号。如果您正在寻找BAZ(),请使用:

/FOO (\d+).+BAR (\d+).+BAZ \((?:\\\\(\w+))?\)/i