簡體   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