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演示是反向的,因为我是反向启动的)…试试这个:你们可以在这里看到更好的例子。你是在尝试分开配对吗?我会先在|
上爆炸,然后在=
上爆炸。