Как сделать регулярное выражение для нескольких условий?

У меня есть код regexp, как показано ниже (я использую плагин 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, однако я хочу true для nik3, я заметил, что я не могу поставить or () после или () для множественной проверки, он просто дает мне весь ложный результат, как мне это достичь?

Всего 1 ответ


Я не знаком с VerbalExpression , но RegExp который делает это, достаточно прост.

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

void main() {
  final regex = RegExp(pattern);
  print(regex.hasMatch(�'));    // true
  print(regex.hasMatch(�'));    // true
  print(regex.hasMatch(�'));    // true
  print(regex.hasMatch(�'));     // false
  print(regex.hasMatch(�'));    // false
  print(regex.hasMatch(�'));   // false
}

Объяснение шаблона:

  • Префикс r означает, что дротик интерпретирует его как необработанную строку («$» и «» не рассматриваются как специальные).
  • ^ И $ представляют начало и конец строки, поэтому она будет соответствовать только всей строке и не сможет найти совпадения только от части строки.
  • (01|02|03) «01» или «02» или «03». | означает ИЛИ. Обертка в круглых скобках позволяет узнать, где остановить OR.
  • S соответствует любому символу без пробелов.
  • {12} означает, что предыдущая вещь должна повторяться 12 раз, поэтому S{12} означает любые 12 непробельных символов.

Есть идеи?

10000