Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式匹配源数据,如7px 7px 7px 7px?_Regex_Regular Language - Fatal编程技术网

Regex 正则表达式匹配源数据,如7px 7px 7px 7px?

Regex 正则表达式匹配源数据,如7px 7px 7px 7px?,regex,regular-language,Regex,Regular Language,我需要一个正则表达式,它将执行以下操作--> 比如说, 保证金:7px 7px 7px 7px 应压缩到--> 利润率:7px (注意:数字可能不仅仅是7,它可以是任何数字。并且单位可以是px | em |%| in | cm | mm | pc | pt | ex)可能您不是要求特殊情况7,而是要求任何数字,其中四个数字都是相同的,不存在这样的正则表达式。可能您不是要求特殊情况7,而是要求任何数字,其中所有四个都是相同的,没有这样的正则表达式。在重复4次的特定情况下,这肯定是可能的 使用反向引

我需要一个正则表达式,它将执行以下操作-->

比如说,

保证金:7px 7px 7px 7px

应压缩到-->

利润率:7px


(注意:数字可能不仅仅是7,它可以是任何数字。并且单位可以是px | em |%| in | cm | mm | pc | pt | ex)

可能您不是要求特殊情况7,而是要求任何数字,其中四个数字都是相同的,不存在这样的正则表达式。

可能您不是要求特殊情况7,而是要求任何数字,其中所有四个都是相同的,没有这样的正则表达式。

在重复4次的特定情况下,这肯定是可能的

使用反向引用,对于重复次数为
n
的特定值,这是可能的。在您的情况下,
n=4

这一个匹配任何仅由字母字符组成的“单位”值,即“px”、“em”或“foo”,加上特例“%”。通过使用更具体的匹配项替换
\w*
(?:em | px | |……)

例如:

// first four examples all match
echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '7px 7px 7px 7px');
1

echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '7em 7em 7em 7em');
1

echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '5px 5px 5px 5px');
1

echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '7% 7% 7% 7%');
1

echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '5.2cm 5.2cm 5.2cm 5.2cm');
1

// different value, no match
echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '5px 5px 5px 7px');
0

// not 4 elements, no match
echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '7px 7px 7px');
0

// different unit, no match
echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '7em 7em 7em 7px');
0

在重复4次的特定情况下,这是绝对可能的

使用反向引用,对于重复次数为
n
的特定值,这是可能的。在您的情况下,
n=4

这一个匹配任何仅由字母字符组成的“单位”值,即“px”、“em”或“foo”,加上特例“%”。通过使用更具体的匹配项替换
\w*
(?:em | px | |……)

例如:

// first four examples all match
echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '7px 7px 7px 7px');
1

echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '7em 7em 7em 7em');
1

echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '5px 5px 5px 5px');
1

echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '7% 7% 7% 7%');
1

echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '5.2cm 5.2cm 5.2cm 5.2cm');
1

// different value, no match
echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '5px 5px 5px 7px');
0

// not 4 elements, no match
echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '7px 7px 7px');
0

// different unit, no match
echo preg_match('/^(\d+(?:\.\d+)?(?:\w*|%))\s+\1\s+\1\s+\1$/', '7em 7em 7em 7px');
0
(\d+(px | em | in | cm | mm | pc | pt | ex))\s+\1\s+\1
替换为
$1

\d+
匹配一个或多个数字
(px | em | in | cm | mm | pc | pt | ex)
与上述任何一个单位匹配
\s+
匹配一个或多个空格(用于匹配每次出现之间的分隔符)
\1
匹配第一个捕获组,即数字后跟单位(4次\1需要4次数字+单位)

对于允许小数部分,请使用
(\d+(.\d+)(px | em | in | cm | mm | pc | pt | ex))\s+\1\s+\1\s+\1

替换为
$1
将匹配的输入替换为第一捕获组替换为
(\d+(px | em |%| in | cm | mm | pc | pt | ex))\s+\1\s+\1+\s+\1
替换为
$1

\d+
匹配一个或多个数字
(px | em | in | cm | mm | pc | pt | ex)
与上述任何一个单位匹配
\s+
匹配一个或多个空格(用于匹配每次出现之间的分隔符)
\1
匹配第一个捕获组,即数字后跟单位(4次\1需要4次数字+单位)

对于允许小数部分,请使用
(\d+(.\d+)(px | em | in | cm | mm | pc | pt | ex))\s+\1\s+\1\s+\1



替换为
$1
将匹配的输入替换为第一个捕获组

为什么不尝试联机压缩程序(如此)我正在尝试编写一个压缩程序,但在这方面有问题您的“问题”中没有真正的问题。澄清您想要的内容。@Kleinfeund:OP希望找到4个重复,并用一个替换。@Kleinfeund我认为隐含的问题是“什么正则表达式可以为我做这件事?”为什么不尝试一个在线压缩器(如此)我正在尝试编写一个,但在这方面有问题您的“问题”中没有真正的问题。澄清您想要的内容。@Kleinfeund:OP希望找到4个重复,并将其替换为一个。@Kleinfeund我认为隐含的问题是“什么正则表达式可以为我做这件事?”是的,数字可以是任何数字。我指的不是特例7。实际上你可以,请看我的答案。我认为一个正则表达式是不可能的,在更一般的情况下,它必须匹配重复的任意数量的相同字符串。@leftclickben:对。看起来正则表达式引擎比数学正则表达式更强大。哦,核心数学——这就是为什么我在浏览维基百科页面后感到头痛:-)是的,是的,数字可以是任何东西。我指的不是特例7。实际上你可以,请看我的答案。我认为一个正则表达式是不可能的,在更一般的情况下,它必须匹配重复的任意数量的相同字符串。@leftclickben:对。看起来正则表达式引擎比数学正则表达式更强大。哦,核心数学——这就是为什么我只看了一眼维基百科页面就头疼的原因:-)对不起,我错过了替换部分。。。只需使用
“$1”
作为替换值:-)@leftclickben谢谢你的回答,不知道如何重复4次。。。。。好day@leftclickben但是我认为-->(\d+(px | em | in | cm | mm | pc | pt | ex))\s+\1\s+\1这个正则表达式更好!!是的,我在回答中说,如果你想更具体一点,你可以列出所有的单位值,我只是有点懒,键入它,确保我得到了每一个单位类型,或者查找;-)另外,我刚刚更新了我的答案,允许像
5.2cm
这样的十进制值。很抱歉,我错过了替换位。。。只需使用
“$1”
作为替换值:-)@leftclickben谢谢你的回答,不知道如何重复4次。。。。。好day@leftclickben但是我认为-->(\d+(px | em | in | cm | mm | pc | pt | ex))\s+\1\s+\1这个正则表达式更好!!是的,我在回答中说,如果你想更具体一点,你可以列出所有的单位值,我只是有点懒,键入它,确保我得到了每一个单位类型,或者查找;-)此外,我刚刚更新了我的答案,允许使用十进制值,如
5.2cm
,这是用于幅值+单位部分,不包括标签。你的输入和输出是什么?也许让小组围绕单元类型a