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