我正在寻找一个正则表达式来找到右上角左下方的CSS快捷方式字符模式(即:10px 20px 40px 0)和项目号为2的交换项目2(左右交换)。优选地,该正则表达式应该能够识别px值以及%和em,并且将考虑0可以存在而没有任何标识符。
答案 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
<强>解释强>
这个表达式由4个相同的捕获组组成,所以我只解释一个。
这是一个捕获组,因为表达式周围有h括号。第二对括号在左括号后面有一个?:
,因为它是一个非捕获组。它只是对替代品进行分组,我不需要存储部分结果。
(0|\d+(?:px|em|%))
此表达式匹配0或一系列数字(\d+
),后跟px
,em
或%
。
使用\s
空白字符将这些表达式放在一起。