RegEx将标点符号移出标记


RegEx to move punctuation outside of tag?

出于数据清理的目的,我需要将出现在某些结束标记(a, b, i, strong, em)之前的标点符号(逗号和句号)移动到这些结束标记的另一侧。

例如,这段文字:

<p>Lorem ipsum dolor sit <i>amet,</i> consectetur adipiscing elit.</p>

应该转换成:

<p>Lorem ipsum dolor sit <i>amet</i>, consectetur adipiscing elit.</p>

如果可能的话,如果RegEx也可以移动出现在标记末尾的空格,那将是整洁的,尽管我认为这可以通过简单地运行两次preg_replace来完成,一次用于空格,一次用于标点符号。例如:

<p>Lorem ipsum dolor sit <i>amet, </i>consectetur adipiscing elit.</p>
<p>Lorem ipsum dolor sit <i>amet</i>, consectetur adipiscing elit.</p>

该方法使用两个捕获组:一个捕获逗号或句号后面跟着零个或多个空格,第二个捕获结束标记。preg_replace用于反转它们的顺序。

$string = '<p>Lorem ipsum dolor sit <i>amet, </i>consectetur adipiscing elit.</p>';
$pattern = '/([,.] *)(<'/(?:a|b|em|i|strong)>)/g';
$replacement = '$2$1';
$result = preg_replace( $pattern, $replacement, $string );

忽略所有关于等待HTML正则表达式解析的恐怖问题,这对我来说很有效:

$re = "/([''W]+)(<''/(a|b|em|i|strong)>)/"; 
$str = "<p>Lorem ipsum dolor sit <i>amet, </i>consectetur adipiscing elit.</p>"; 
$subst = "$2$1"; 
$result = preg_replace($re, $subst, $str);

你可以在这里上网查看