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


looking for a regex to find and reorder a string

我正在寻找一个正则表达式找到CSS快捷字符模式形式左上右下(即:10px 20px 40px 0)和交换项目编号2与项目编号4(交换左和右)。最好这个正则表达式应该能够识别px值以及%和em,并考虑到0可以在没有任何标识符的情况下出现。

您可以像这样使用正则表达式:

('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%
$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);

你的意思是:

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

并替换为

$1 $4 $3 $2

在Regexr上查看

解释:

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

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

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

该表达式匹配一个0或一串数字('d+)后接pxem%

这些表达式使用's空格字符组合在一起。