2015-02-24 64 views
2

我想知道是否有可能在PHP中爲表達式的一部分(不是整個表達式)設置正則表達式修飾符。PHP正則表達式部分表達式的無情修飾符

我有以下代碼:

$romanDigitsRegexp="(M{1,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})|M{0,4}(CM|C?D|D?C{1,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})|M{0,4}(CM|CD|D?C{0,3})(XC|X?L|L?X{1,3})(IX|IV|V?I{0,3})|M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|I?V|V?I{1,3}))"; 

    $test = "Properties of Wide Bandgap li-vi Semiconductors VolUme1"; 

    $volumeInfoFound = preg_match("/(\bv|Volume|\bvol)[\.| ]*(\d+|".$romanDigitsRegexp.")\b/i",$test, $matches); 

這一全球性的/我修飾符使問題以羅馬數字。我想刪除它,但同時抓住諸如「音量」,「音量」,「音量」,「音量」,「音量」等詞。是否有可能添加\我修改器只爲這一部分:

(\bv|Volume|\bvol) 

回答

3

您可以打開/關閉修飾符是這樣的:

(?i)subpattern(?-i) 

注:內聯改性劑的作用是有限的到最裏面的組。所以((?i)toto)abcd不符合totoABCD。而且一個團隊無法防禦上一級的修改器:(?i)(toto)abcd匹配TOTOabcd

,如果你想對封閉在非捕獲組子模式修改器開關,您可以使用此語法太:

(?i:subpattern) 

同樣關掉:

(?-i:subpattern) 

注:不幸的是,你不能對原子組做同樣的事情。 (你可以不寫(?i>subpattern)

對於兩種語法,你可以在同一時間切換幾個修飾符:

(?ix-m) 

(?ix-ms:subpattern) 

注意:它不禁止寫(?i-i),但它是無用的。

+0

謝謝,它的工作原理。 – Tamara 2015-02-24 21:22:13