[英]Regex escape specific characters
我正在使用 preg_split 来制作带有一些值的数组。 如果我有诸如 'This*Value' 之类的值,preg_split 会将值拆分为 array('This', 'Value') 因为值中有 *,但我想将它拆分到我指定的位置,而不是* 来自值。如何才能对值进行转义,使字符串的符号对表达式不生效?
例子:
// 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'
);
[
和]
被解释为字符类,因此其中的任何字符都匹配。 试试这个,但不要拆分它,使用 preg_match 并查看匹配的捕获组。
"/(\{([^:]*)\:([^:]*)\})+/"
原始答案(不适用于OP的问题):
如果你想用\
like this\*value
在你的值中转义*
,你可以在这个正则表达式上拆分:
(?<!\\)\*
解决您的问题的正确和最安全的方法是使用preg_quote
。 如果字符串包含不应被引用的字符,则需要在引用后将它们str_replace
回来。
您当前的正则表达式有点……狂野。 字符 class 中的大多数特殊字符都是按字面处理的,因此可以大大简化:
$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"
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.