簡體   English   中英

如何使正則表達式用於多種條件?

[英]How to make regexp for multiple condition?

我有如下正則表達式代碼(我正在使用VerbalExpression dart插件),我的目的是檢查字符串是否以“ 36”開頭,后跟“ 01”,“ 02”或“ 03”。 之后,只要整個字符串為16個字符長即可。

  var regex = VerbalExpression()
  ..startOfLine()
  ..then("36")
  ..then("01")
  ..or("02")
  ..anythingBut(" ")
  ..endOfLine();
String nik1 = "3601999999999999";
String nik2 = "3602999999999999";
String nik3 = "3603999999999999";

print('result : ${regex.hasMatch(nik1)}');
print('Hasil : ${regex.hasMatch(nik2)}');
print('Hasil : ${regex.hasMatch(nik3)}');

我的代碼僅適用於nik1和nik2,但是我想要適用於nik3,我注意到我不能在or()之后放置or()進行多次檢查,這只會給我所有錯誤的結果,我如何實現呢?

我不熟悉VerbalExpression ,但是執行此操作的RegExp很簡單。

const pattern = r'^36(01|02|03)\S{12}$';

void main() {
  final regex = RegExp(pattern);
  print(regex.hasMatch('3601999999999999'));    // true
  print(regex.hasMatch('3602999999999999'));    // true
  print(regex.hasMatch('3603999999999999'));    // true
  print(regex.hasMatch('360199999999999'));     // false
  print(regex.hasMatch('3600999999999999'));    // false
  print(regex.hasMatch('36019999999999999'));   // false
}

模式說明:

  • r前綴表示dart會將其解釋為原始字符串(“ $”和“ \\”不視為特殊字符串)。
  • ^$表示字符串的開頭和結尾,因此它將僅匹配整個字符串,而不能僅從字符串的一部分中找到匹配項。
  • (01|02|03) “ 01”或“ 02”或“ 03”。 | 表示“或”。 將其包裝在括號中可使其知道在哪里停止OR。
  • \\S匹配任何非空白字符。
  • {12}表示前一個事物必須重復12次,因此\\S{12}表示任何12個非空白字符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM