在捕获组中寻找特定角色

时间:2018-10-02 12:56:21

标签: php preg-replace pcre

我需要替换任何(变量)给定字符串中的所有双引号。

例如:

$text = 'data-caption="hello"world">';
$pattern = '/data-caption="[[\s\S]*?"|(")]*?">/';
$output = preg_replace($pattern, '"', $text);

应导致:

"hello"world" 

(上面的模式是我尝试使其工作)

问题是,我现在不预先知道字符串中是否以及要包含多少个双引号。

如何将"替换为quot;

1 个答案:

答案 0 :(得分:1)

您可以匹配data-caption="">之间的字符串,然后仅使用""将匹配的所有str_replace替换为$text = 'data-caption="<element attribute1="wert" attribute2="wert">Name</element>">'; $pattern = '/data-caption="\K.*?(?=">)/'; $output = preg_replace_callback($pattern, function($m) { return str_replace('"', '"', $m[0]); }, $text); print_r($output); // => data-caption="<element attribute1="wert" attribute2="wert">Name</element>">

data-caption="

请参见PHP demo

详细信息

  • \K-起始定界符
  • .*?-匹配重置运算符
  • (?=">)-除换行符以外的任何0+个字符,并且尽可能少
  • ">-正向超前,需要在当前位置的右侧紧跟preg_replace_callback子字符串。

匹配项将传递到$m[0]内部的匿名函数(可通过"访问),在这里可以方便地替换所有def norm(data): min_v, max_v = min(data), max(data) mid_v = (max_v + min_v) >> 1 len_v = float((max_v - min_v) >> 1) return [(v-mid_v)/len_v for v in data] 符号。