我可以在同一行中修剪preg_replace匹配吗?

时间:2014-01-10 22:50:40

标签: php regex

我正在研究一种使用正则表达式清理生成的类属性的方法。

有这个HTML

<div class=" class1 class2 ">

并使用此preg

$string = preg_replace('/class=["\'](?P<class>[^"\'<>]+)["\']/i', 'class="$1"', $string);

如何告诉php修剪$ 1附近的尾随空格? (1美元基本上是课内的内容)

是否有其他方法可以检测和替换终端空间?

谢谢

已编辑:我基本上是想要这样做

'class =“'。trim($ 1)。'”''

但$ 1不可用作变量。我已经尝试了$$ 1和$ {$ 1}。也许还有其他语法可以做到这一点。

2 个答案:

答案 0 :(得分:2)

您可以使用略微修改的正则表达式来捕捉$1中任意一侧的空格

$string = preg_replace('/class=["\']\s*(?P<class>[^"\'<>]+?)\s*["\']/i', 'class="$1"', 
          '<div class=" class1 class2 ">') );


var_dump( $string );
string(27) "<div class="class1 class2">"

答案 1 :(得分:0)

如何告诉php修剪$ 1附近的尾随空格?

你可以做rtrim和ltrim来减少起始和尾随空格并保持中间一次,这很重要。

$string = '<div class=" class1 class2 ">';
$string = preg_replace('/class=["\'](?P<class>[^"\'<>]+)["\']/i', '$1', $string);
$string = rtrim($string);  
$string = ltrim($string);
$string = 'class="'.$string.'"';
相关问题