Php 预赛获胜';收集工作不正确
它似乎工作正常,但如果你放了前导字符,它不会检查,如果你放了结尾字符,它也不会检查 我要确保字符串的格式如下:Php 预赛获胜';收集工作不正确,php,preg-match,Php,Preg Match,它似乎工作正常,但如果你放了前导字符,它不会检查,如果你放了结尾字符,它也不会检查 我要确保字符串的格式如下: 6 Numbers | Hyphen | 1 Number | A-Z any case | Hyphen | 5 Numbers 所以像这样的123456-1a-12345和123456-1a-12345应该可以工作 $string = 'this12345-1A-12345'; // This works, and it shouldn't $string = '12345-1A
6 Numbers | Hyphen | 1 Number | A-Z any case | Hyphen | 5 Numbers
所以像这样的123456-1a-12345
和123456-1a-12345
应该可以工作
$string = 'this12345-1A-12345'; // This works, and it shouldn't
$string = '12345-1A-12345this'; // This also works and it shouldn't
$pattern = "([0-9]{6}[-]{1}[0-9]{1}[A-Za-z]{1}[-]{1}[0-9]{5})";
echo preg_match($pattern, $string);
我做错了什么?很抱歉,我对
preg\u match
非常陌生,我找不到任何好的语法库。您可以使用^
对行的开头进行正则表达式检查,对行的结尾进行$
检查
$pattern = "(^[0-9]{6}[-]{1}[0-9]{1}[A-Za-z]{1}[-]{1}[0-9]{5}$)";
此模式仅在字符串在您的规范之前和之后没有任何内容时才适用。您可以使用
^
对行的开头进行正则表达式检查,对行的结尾进行$
检查
$pattern = "(^[0-9]{6}[-]{1}[0-9]{1}[A-Za-z]{1}[-]{1}[0-9]{5}$)";
仅当字符串在您的规范之前和之后没有任何内容时,此模式才适用。您只需添加锚来标记模式的开始和结束(并添加模式分隔符): 另外,您的图案可以缩短为:
$pattern = '~^[0-9]{6}-[0-9][A-Z]-[0-9]{5}$~i';
preg_match($pattern, $string, $match);
print_r($match);
必须仅添加锚定以标记图案的开始和结束(并添加图案分隔符): 另外,您的图案可以缩短为:
$pattern = '~^[0-9]{6}-[0-9][A-Z]-[0-9]{5}$~i';
preg_match($pattern, $string, $match);
print_r($match);
()
是分隔符。我不知道这一点,以为它们只用于定义组-谢谢()
是分隔符。我不知道这一点,以为它们只用于定义组-谢谢!*有关一些有用的工具或更好的教程,请参见和。*有关一些有用的工具或更好的教程,请参见和。~
做什么,~i
做什么?你能解释一下吗?@deceze:是的,我知道,括号可以用作分隔符,但这是最糟糕的选择,因为它在正则表达式模式中非常模糊。因此,如果~
是新的分隔符,那么I
的作用是什么?@Arian:你可以使用的最好的分隔符是你确定不会在你的模式中写入的字符。这并不总是可能的,但是当我看到人们使用/
作为分隔符来对待XML时,就像…@Arian:检查deceze链接,你会发现你可以使用几种类型的分隔符。~
做什么,~I
做什么?你能解释一下吗?@deceze:是的,我知道,括号可以用作分隔符,但这是最糟糕的选择,因为它在正则表达式模式中非常模糊。因此,如果~
是新的分隔符,那么I
的作用是什么?@Arian:你可以使用的最好的分隔符是你确定不会在你的模式中写入的字符。这并不总是可能的,但当我看到人们使用/
作为分隔符来对待XML时,就像…@Arian:check deceze link一样,你会发现你可以使用几种类型的分隔符。