繁体   English   中英

正则表达式转义特定字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM