繁体   English   中英

RegEx用于替换两个定界符之间所有出现的字符

[英]RegEx for replacing all occurrences of character between two delimiters

我在这里需要一些RegEx神灵的帮助,因为我已经尝试了两个小时,无法解决这个问题:

样本来源:

DisplayText="cf font="Arial" size="10" complexscriptsfont="Arial" complexscriptssize="10" asiantextfont="Arial" fontcolor="595959"">

我想将“”的所有实例替换为"但前提是这些都在“”内。 即以上应成为:

DisplayText="cf font="Arial" size="10" complexscriptsfont="Arial" complexscriptssize="10" asiantextfont="Arial" fontcolor="595959"">

DisplayText内部文本的确切结构一直是未知的,并且一直在变化,但是无论如何,我们都不希望“外部”。 如您所见,外部的“保持不变。这仅应出现在以DisplayText =”开头且以“>结尾的字符串中。

因此,找到需要编辑的字符串很容易:

/DisplayText\="(.*?)"\>/

现在,我们只需要 $ 1美元"替换“ "

这是针对PHP的。

帮助将不胜感激!

最终这成功了!

$postproc = preg_replace('#(DisplayText="|\G(?!\A))([^">]*)"(?!\s*>)#', '$1$2"', $postproc);

因此,我只需要添加DisplayText即可防止RegEx变得过于热心,并开始接触XML中的其他标签。

谢谢大家,尤其是revo的建议,我似乎无法支持revo的评论?

这段代码怎么样:

https://3v4l.org/6qHhb

$str = 'DisplayText="cf font="Arial" size="10" complexscriptsfont="Arial" complexscriptssize="10" asiantextfont="Arial" fontcolor="595959"">';
$splitted = explode('"', $str);
$splittedSize = count($splitted);
$result = $splitted[0].'"'.implode('"',array_slice($splitted,1,$splittedSize-2)).$splitted[$splittedSize-1].'"';
echo $result;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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