正则表达式转义特定字符

时间:2011-06-29 19:58:32

标签: php regex escaping character

我正在使用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'
);

3 个答案:

答案 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"
}