我正在處理模板類,並試圖從字符串參數列表中解析出帶引號的字符串列表。舉個例子字符串:用於在字符串中匹配雙引號和/或單引號字符串的PHP正則表達式
$string = 'VAR_SELECTED, \'Hello m\'lady\', "null"';
我在未來與提取字符串「Hello m'lady」和「空」正則表達式的問題。我已經得到的最接近是
$string = 'VAR_SELECTED, \'Hello m\'lady\', "null", \'TE\'ST\'';
preg_match_all('/(?:[^\']|\\\\.)+|(?:[^"]|\\\\.)+/', $string, $matches);
print_r($matches);
,輸出:
Array
(
[0] => Array
(
[0] => VAR_SELECTED,
[1] => 'Hello m'lady',
[2] => "null",
[3] => 'TE'ST'
)
)
但是更復雜的情況:
$string = 'VAR_SELECTED, \'Hello "Father"\', "Hello \'Luke\'"';
preg_match_all('/(?:[^\']|\\\\.)+|(?:[^"]|\\\\.)+/', $string, $matches);
print_r($matches);
輸出:
Array
(
[0] => Array
(
[0] => VAR_SELECTED,
[1] => 'Hello
[2] => "Father"
[3] => ',
[4] => "Hello
[5] => 'Luke'
[6] => "
)
)
誰能幫助我解決這個問題?多個正則表達式是前進的方向嗎?
編輯也許用一個佔位符替換字符串中的逗號,然後用爆炸拆分字符串會更容易?
編輯2只是想到了一個簡單的不安全選項(我不打算使用),但會生成一個E_NOTICE錯誤。
$string = 'return array(VAR_SELECTED, \'Hello , "Father"\', "Hello \'Luke\'4");';
$string = eval($string);
print_r($string);
您如何知道在上面給出的示例中的「m'lady」中的撇號包含在引號內 - 如果字符串中有更多的單引號,這會不會破裂? – 2010-07-10 17:09:19
這是有點我想解決的問題。 – buggedcom 2010-07-10 18:23:36