2011-03-14 154 views
2

使用以下正則表達式匹配下面的字符串,到目前爲止這麼好。現在,我怎麼能讓BAZ可選的內容,以便它匹配的情況下BAZ()php正則表達式匹配模式

$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' => 
); 
+0

使用運算符'?'也許?我不明白你想要什麼 – 2011-03-14 22:03:17

+0

你以前的問題去了哪裏? – mario 2011-03-15 03:56:39

回答

1

聽起來像是你只是想整個包住在一個非捕獲組中的東西,並添加一個?運算符。

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

請注意,這會捕獲後面沒有括號的BAZ。如果您正在尋找BAZ(),請使用:

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

謝謝,我正在尋找什麼! – shareds 2011-03-14 22:08:44

1

爲了使一些可選的,你可以把它放在一個非捕獲組(?: ...)然後將一個問號後組。問號是一個量詞,意思是「零個或一個」。

換句話說,改變這種:

\\\\(\w+) 

這樣:

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

所以整個表達式爲:

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