首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在多个条件下进行正则表达式?

如何在多个条件下进行正则表达式?
EN

Stack Overflow用户
提问于 2018-10-12 15:45:40
回答 1查看 1.5K关注 0票数 2

我有如下所示的regexp代码(我使用的是VerbalExpression的dart插件),我的目的是检查字符串是否以"36“开头,后面跟着"01”、"02“或"03”。在此之后,只要整个字符串的长度为16个字符,就可以是任何内容。

代码语言:javascript
运行
复制
  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为真,我注意到不能将或()后面或()作为多个检查,它只会给我所有的错误结果,如何实现呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-12 19:05:01

我不熟悉VerbalExpression,但是这样做的RegExp非常简单。

代码语言:javascript
运行
复制
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个非空格字符。
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52782942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档