0

{{esc}}"Content"{{/esc}} ... {{esc}}"More content"{{/esc}}给定我想输出的字符串,\"Content\" ... \"More content\"例如,我试图转义字符串中的引号。(不过,这是一个人为的例子,所以像“只使用这个库来做”这样的答案是没有帮助的。)

这是我目前的解决方案:

return preg_replace_callback(
  '/{{esc}}(.*?){{\/esc}}/', 
  function($m) {
    return str_replace('"', '\\"', $m[1]);
  },
  $text
);

如您所见,我需要说$m[1],因为 aprint_r显示$m如下:

Array 
(
    [0] => {{esc}}"Content"{{/esc}}
    [1] => "Content"
)

或者,对于第二场比赛,

Array 
(
    [0] => {{esc}}"More content"{{/esc}}
    [1] => "More content"
)

我的问题是:为什么我的正则表达式会$m成为一个数组?有什么方法可以让我得到$m[1]一个变量的结果$m

4

2 回答 2

0

正则表达式匹配字符串并将结果放入数组中。如果匹配,第一个索引存储整个匹配字符串,数组的其余元素是捕获的字符串。

preg_replace_callback()行为像preg_match()

 $result = array();
 preg_match('/{{esc}}(.*?){{\/esc}}/', $input_str, $result);

 // $result will be an array if match.
于 2013-09-25T06:21:11.893 回答
0

在 Jack 的帮助下,我在这里回答了我自己的问题,因为 srain 没有明确说明这一点:数组的第二个元素是括号中的 subexpression 捕获的结果(.*?),根据PHP 手册。实际上,似乎没有一种方便的方法来提取与此子表达式匹配的字符串,否则。

于 2013-09-25T06:34:28.017 回答