【问题标题】:regular expressions for url parserurl解析器的正则表达式
【发布时间】:2012-06-15 12:24:42
【问题描述】:
<?php
$string = 'user34567';
if(preg_match('/user(^[0-9]{1,8}+$)/', $string)){
echo 1;
}
?>
我想检查字符串是否有单词 user 后跟数字,最多可以是 8 个符号。
【问题讨论】:
标签:
php
regex
preg-match
regular-language
【解决方案1】:
实际上你很接近:
if(preg_match('/^user[0-9]{1,8}$/', $string)){
“must match at start of string”的锚点应该一直在前面,然后是“user”字面量;然后指定字符集[0-9] 和乘数{1,8}。最后,以“必须在字符串结尾匹配”锚点结束。
对你原来的表达的几个cmet:
-
^ 匹配字符串的开头,因此将其写入此表达式中的任何其他位置,但开头不会产生预期的结果
-
+ 是一个乘数; {1,8} 也是一个,但表达式后只能使用一个乘数
- 除非您打算使用在表达式中找到的数字,否则不需要括号。
顺便说一句,您也可以使用\d 代替[0-9]。它是一个自动字符组,可以缩短正则表达式,尽管这个特定的字符组不会保存太多字符 ;-)
【解决方案2】:
通过使用^ 和$,只有当模式是行中唯一的东西时,您才会匹配。那是你要的吗?如果是这样,请使用以下内容:
preg_match( '/^user[0-9]{1,8}[^0-9]$/' , $string );
如果您想在一行中的任何位置找到此模式,我会尝试:
preg_match( '/user[0-9]{1,8}[^0-9]/' , $string );
与往常一样,您应该使用 RegexPal 之类的参考工具单独进行正则表达式测试。
【解决方案3】:
使用这个正则表达式:
/^user\d{1,8}$/
【解决方案4】:
尝试以下正则表达式:
/^user([0-9]{1,8})$/
【解决方案5】:
你很亲密,这是你的正则表达式:/^user[0-9]{1,8}$/