Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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
Php 带可选参数的正则表达式|_Php_Regex - Fatal编程技术网

Php 带可选参数的正则表达式|

Php 带可选参数的正则表达式|,php,regex,Php,Regex,我有下一个代码,我试图根据正则表达式知道字符串是否有效。 我试图只验证下一个序列后面的字符串 lettersOrNumbersAndunderDashes=lettersOrNumbersAndUnderdashes 但如果有一个竖条,这个序列可以重复 例如parameter1=value1 | parameter2=value2 | parameterN=valueN if (preg_match("/((^[A-Za-z0-9_]+=[A-Za-z0-9_]+)\|?)/m", "perP

我有下一个代码,我试图根据正则表达式知道字符串是否有效。 我试图只验证下一个序列后面的字符串

lettersOrNumbersAndunderDashes=lettersOrNumbersAndUnderdashes
但如果有一个竖条,这个序列可以重复

例如
parameter1=value1 | parameter2=value2 | parameterN=valueN

if (preg_match("/((^[A-Za-z0-9_]+=[A-Za-z0-9_]+)\|?)/m", "perPd_asd=as_3_4d|asdas=asdasd")) 
    return 'Valid';

    return 'Invalid';

我想我遗漏了一些东西或构建了一个错误的正则表达式。

参数名是否可能以数字开头

您的正则表达式需要更多的测试用例,例如:

0=somevalue
param=value|
one_more_param=@#$%^|some_param=some-value
_=VALUE|abc=***
a=1|b=2|c=3
param=0|param=1
我的解决办法是:

^(([_A-Za-z][A-Za-z0-9_]*=[^\|=]+)\|)*([_A-Za-z][A-Za-z0-9_]*=[^\|=]+)$

参数名称可能从数字开始

您的正则表达式需要更多的测试用例,例如:

0=somevalue
param=value|
one_more_param=@#$%^|some_param=some-value
_=VALUE|abc=***
a=1|b=2|c=3
param=0|param=1
我的解决办法是:

^(([_A-Za-z][A-Za-z0-9_]*=[^\|=]+)\|)*([_A-Za-z][A-Za-z0-9_]*=[^\|=]+)$

您所做的错误操作是将
^
放在模式的开头,这意味着仅当文本位于字符串的开头时,它才会匹配。这应该解决:

if (preg_match("/(([A-Za-z0-9_]+=[A-Za-z0-9_]+)\|?)/m", "perPd_asd=as_3_4d|asdas=asdasd")) 
return 'Valid';

return 'Invalid';

您所做的错误操作是将
^
放在模式的开头,这意味着仅当文本位于字符串的开头时,它才会匹配。这应该解决:

if (preg_match("/(([A-Za-z0-9_]+=[A-Za-z0-9_]+)\|?)/m", "perPd_asd=as_3_4d|asdas=asdasd")) 
return 'Valid';

return 'Invalid';

第一个字符串只有一个
=
。另外,
[A-Za-z0-9.]
可以是
\w
。你能说得更具体一点吗?我对regex很陌生。你的表达是
stuff
然后A
=
然后
stuff
。您的第一个字符串符合此条件,因为有一个
=
。您的第二个脚本在第一个
=
之后停止。(我的regex101演示是反向的,因为我是反向启动的)…试试这个:你们可以在这里看到更好的例子。你是在尝试分开配对吗?我首先在
|
上爆炸,然后是
=
。第一个字符串只有一个
=
。另外,
[A-Za-z0-9.]
可以是
\w
。你能说得更具体一点吗?我对regex很陌生。你的表达是
stuff
然后A
=
然后
stuff
。您的第一个字符串符合此条件,因为有一个
=
。您的第二个脚本在第一个
=
之后停止。(我的regex101演示是反向的,因为我是反向启动的)…试试这个:你们可以在这里看到更好的例子。你是在尝试分开配对吗?我会先在
|
上爆炸,然后在
=
上爆炸。