[英]Quick PHP regex for digit format
我花了几个小时弄清楚如何在PHP中编写正则表达式,只需要传递以下格式的字符串即可:
(any digit)_(any digit)
看起来像:
219211_2
到目前为止,我尝试了很多组合,我认为这是最接近解决方案的组合:
/(\\d+)(_)(\\d+)/
同样,如果有一种方法可以将最后一个数字(下划线之后的数字)的范围限制为一定数量的数字(例如最大12个数字),那也不错。
我仍在学习正则表达式,因此非常感谢您的帮助。
您不需要在PHP中双转义\\\\d
。
使用此正则表达式:
"/^(\d+)_(\d{1,12})$/"
\\d{1,12}
将匹配1到12位专家 下列:
\d+_\d{1,12}(?!\d)
将匹配“字符串中的任何地方”。 如果您需要“在开始时”,“在结束时”或“这就是全部”,那么您将需要使用锚点对其进行修改
^\d+_\d{1,12}(?!d) - must be at the start
\d+_\d{1,12}$ - must be at the end
^\d+_\d{1,12}$ - must be the entire string
演示: http : //regex101.com/r/jG0eZ7
说明:
\d+ - at least one digit
_ - literal underscore
\d{1,12} - between 1 and 12 digits
(?!\d) - followed by "something that is not a digit" (negative lookahead)
最后一点很重要,否则它将与前12个匹配并忽略第13个。 如果您的数字恰好在字符串的末尾,并且您使用的是我最初的格式[^\\d]
则在这种情况下将无法匹配。
感谢@sln指出这一点。
尝试这个:
$regex= '~^/(\d+)_(\d+)$~';
$input= '219211_2';
if (preg_match($regex, $input, $result)) {
print_r($result);
}
只需尝试以下正则表达式即可:
^(\d+)_(\d{1,12})$
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.