寻找正则表达式来查找和重新排序字符串

时间:2011-12-07 06:44:21

标签: php regex preg-replace

我正在寻找一个正则表达式来找到右上角左下方的CSS快捷方式字符模式(即:10px 20px 40px 0)和项目号为2的交换项目2(左右交换)。优选地,该正则表达式应该能够识别px值以及%和em,并且将考虑0可以存在而没有任何标识符。

3 个答案:

答案 0 :(得分:1)

你可以使用这样的正则表达式:

(\d+(?:px|em|%)?)\s+(\d+(?:px|em|%)?)\s+(\d+(?:px|em|%)?)\s+(\d+(?:px|em|%)?)

并按照以下方式实施:

$subject = '10px 20% 40px 0';
$result = preg_replace('/(\d+(?:px|em|%)?)\s+(\d+(?:px|em|%)?)\s+(\d+(?:px|em|%)?)\s+(\d+(?:px|em|%)?)/i', '$1 $4 $3 $2', $subject);
echo $result; // Prints: 10px 0 40px 20%

答案 1 :(得分:0)

$string = 'margin: 10px 20px 40px 0; padding: 10px 20px 40px 0;';
$pattern = '/((margin|padding|border)\:)(\s*\S+)(\s+\S+)(\s+\S+)(\s+[^;.]+)/i';
$replacement = '$1$3$6$5$4';
echo preg_replace($pattern, $replacement, $string, -1, $count);

答案 2 :(得分:0)

你的意思是这样的:

(0|\d+(?:px|em|%))\s(0|\d+(?:px|em|%))\s(0|\d+(?:px|em|%))\s(0|\d+(?:px|em|%))

并替换为

$1 $4 $3 $2

here on Regexr

<强>解释

这个表达式由4个相同的捕获组组成,所以我只解释一个。

这是一个捕获组,因为表达式周围有h括号。第二对括号在左括号后面有一个?:,因为它是一个非捕获组。它只是对替代品进行分组,我不需要存储部分结果。

(0|\d+(?:px|em|%))

此表达式匹配0或一系列数字(\d+),后跟pxem%

使用\s空白字符将这些表达式放在一起。