繁体   English   中英

快速PHP正则表达式,用于数字格式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM