我需要PHP中正則表達式的幫助。 我有一個字符串包含大量的數據,格式可能是這樣的。PHP需要的正則表達式preg_split
key=value,e4354ahj\,=awet3,asdfa\=asdfa=23f23
所以我有2個分隔符,和=其中,是一組鍵和值。事情是,鍵和值可以包含相同的符號,和=但他們將永遠逃脫。所以我不能使用爆炸。我需要使用preg_split,但我不擅長正則表達式。
有人能幫我一個這個嗎?
我需要PHP中正則表達式的幫助。 我有一個字符串包含大量的數據,格式可能是這樣的。PHP需要的正則表達式preg_split
key=value,e4354ahj\,=awet3,asdfa\=asdfa=23f23
所以我有2個分隔符,和=其中,是一組鍵和值。事情是,鍵和值可以包含相同的符號,和=但他們將永遠逃脫。所以我不能使用爆炸。我需要使用preg_split,但我不擅長正則表達式。
有人能幫我一個這個嗎?
您需要使用negative lookbehind:
// 4 backslashes because they are in a PHP string, so PHP translates them to \\
// and then the regex engine translates the \\ to a literal \
$keyValuePairs = preg_split('/(?<!\\\\),/', $input);
這會分裂每個,
未逃脫,讓你獲得鍵值對。您可以爲每一對來分隔鍵和值做同樣的:
list($key, $value) = preg_split('/(?<!\\\\)=/', $pair);
@ Jon的回答非常棒。不過,我覺得通過字符串匹配型提供了一個解決方案:
preg_match_all('#(.*?)(?<!\\\\)=(.*?)(?:(?<!\\\\),|$)#', $string, $m);
// You'll find the keys in $m[1] and the values in $m[2]
$array = array_combine($m[1], $m[2]);
print_r($array);
輸出:
Array
(
[key] => value
[e4354ahj\,] => awet3
[asdfa\=asdfa] => 23f23
)
說明:
(.*?)(?<!\\\\)=
匹配任何條件和組,直到=
不前通過\
(.*?)(?:(?<!\\\\),|$)
:匹配任何內容並將其分組,直到,
之前沒有\
或行尾。
偉大的答案喬恩。奇蹟般有效。謝謝 –