我需要替换任何(变量)给定字符串中的所有双引号。
例如:
$text = 'data-caption="hello"world">';
$pattern = '/data-caption="[[\s\S]*?"|(")]*?">/';
$output = preg_replace($pattern, '"', $text);
应导致:
"hello"world"
(上面的模式是我尝试使其工作)
问题是,我现在不预先知道字符串中是否以及要包含多少个双引号。
如何将"
替换为quot;
?
答案 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]
符号。