我正在使用preg_split来制作带有一些值的数组。 如果我有'This * Value'这样的值,preg_split会将值拆分为数组('This','Value')因为值中的*,但是我想把它拆分到我指定的位置,而不是*从value.How可以转义值,所以字符串的符号不会对表达式生效吗?
示例:
// Cut into {$1:$2}
$str = "{Some:Value*Here}";
$result = preg_split("/[\{(.*)\:(.*)\}]+/", $str, -1, PREG_SPLIT_NO_EMPTY);
// Result:
Array(
'Some',
'Value',
'Here'
);
// Results wanted:
Array(
'Some',
'Value*Here'
);
答案 0 :(得分:3)
[
和]
被解释为字符类,因此其中的任何字符都匹配。尝试这个,但不要拆分它,使用preg_match并查看匹配的捕获组。
"/(\{([^:]*)\:([^:]*)\})+/"
原始答案(不适用于OP的问题):
如果您希望使用*
\
中的this\*value
转义(?<!\\)\*
,则可以拆分此正则表达式:
{{1}}
答案 1 :(得分:2)
问题的正确和最安全的解决方案是使用preg_quote
。如果字符串包含不应引用的字符,则在引用后需要str_replace
将它们返回。
答案 2 :(得分:2)
你当前的正则表达式有点......狂野。字符类中的大多数特殊字符都是按字面意思处理的,因此可以大大简化:
$str = "{Some:Value*Here}";
$result = preg_split("/[{}:]+/", $str, -1, PREG_SPLIT_NO_EMPTY);
现在$result
看起来像这样:
array(2) {
[0] => string(4) "Some"
[1] => string(10) "Value*Here"
}