我用正則運算式決議的字串包含一個固定長度的區域,N其中可以是數字或破折號。但是,如果出現破折號,則該區域的其余部分只允許跟隨破折號。在該區域之后,允許出現數字、破折號和字母。
示例(N=5,從頭開始):
12345ABC
12345123
1234-1
1234--1
1----1AB
我怎樣才能正確匹配這個?我目前被困在(?:\d|-(?!\d)){5}[A-Z0-9\-] (for N=5) 之類的事情上,但如果存在破折號,我無法讓數字直接在我的區域之后作業,因為負面的前瞻阻礙了比賽。
更新
字串應該不匹配(N=5)
1-2-3-A
----1AB
--1--1A
uj5u.com熱心網友回復:
您可以斷言前 5 個字符是數字,或者-確保前 5 個字符中的數字之前沒有 -。
^(?![\d-]{0,3}-\d)(?=[\d-]{5})[A-Z\d-] $
^字串的開始(?![\d-]{0,3}-\d)確保在前 5 個字符中沒有-數字之前(?=[\d-]{5})斷言至少 5 位數字或-[A-Z\d-]匹配任何列出的字符 1 次以上$字串結束
正則運算式演示
如果原子組可用:
^(?=[\d-]{5})(?>\d -*|-{5})[A-Z\d_]*$
^字串的開始(?=[\d-]{5})斷言至少 5 個字符-或數字(?>原子團\d -*匹配 1 位數字和可選-|或者-{5}比賽5次-
)關閉原子組[A-Z\d_]*匹配可選字符 AZ 數字或_$字串結束
正則運算式演示
uj5u.com熱心網友回復:
使用非詞邊界斷言\B:
^[-\d](?:-|\B\d){4}[A-Z\d-]*$
非單詞邊界在兩個單詞字符(來自\wie [A-Za-z0-9_])或兩個非單詞字符(來自\Wie [^A-Za-z0-9_])之間的位置成功。(也在非單詞字符和字串的限制之間)
有了它,每個人\B\d總是跟隨一個數字。(并且不能跟隨破折號)
演示
其他方式(如果允許后視):
^\d*-*(?<=^.{5})[A-Z\d-]*$
演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/336633.html
上一篇:正則運算式以獲得最佳匹配
下一篇:從字串中提取空格分隔的數字
