繁体   English   中英

需要正则表达式帮助

[英]Need Regex Help

有人帮我正则表达式吗? 我有一个数字字符串,如:

X024123099XYAAXX99RR

我需要一个正则表达式来检查用户是否插入了正确的信息。 该规则还应具有从左到右检查输入的后备。

例如,测试时,这些输入应返回TRUE:

X024

X024123099X

X024123099XYA

X024123099XYAAXX99R

这些应该返回FALSE:

XX024

X02412AA99X

X024123099XYAAXX9911

等等。 正则表达式必须从左侧开始检查正确的语法。 我有类似的东西,但这似乎不正确:

 \w\d{0,12}\w{0,6}\d{0,2}\w{0,2}

非常感谢任何帮助(我是regex的新手)

如果我理解正确,你的字符串应该与正则表达式匹配

[A-Z]\d{9}[A-Z]{6}\d{2}[A-Z]{2}

但是你也想检查字符串是否可以是匹配字符串的前缀 ,这是正确的吗? 您可能能够在单个正则表达式中表达这一点,但我想不出一种易于阅读的方法。

您还没有说过您正在使用哪种语言,但是如果您的语言在检查正则表达式时提供了一种方法来判断是否已达到输入字符串的结尾,那么这将为您提供一种简单的方法来获得您想要的内容。 例如在java中,方法Matcher.hitEnd告诉你是否到达了结尾,所以下面的代码:

static Pattern pattern = Pattern.compile( "[A-Z]\\d{9}[A-Z]{6}\\d{2}[A-Z]{2}" );
static Matcher matcher = pattern.matcher( "" );

public static void main(String[] args) {
  String[] strings = {
      "X024",
      "X024123099X",
      "X024123099XYA",
      "X024123099XYAAXX99R",
      "XX024",
      "X02412AA99X",
      "X024123099XYAAXX9911"
  };
  for ( String string : strings ) {
    out.format( "%s %s\n", string, inputOK(string) ? "OK" : "not OK" );
  }
}

static boolean inputOK(String input) {
  return matcher.reset(input).matches() || matcher.hitEnd();
}

给出输出:

X024 OK
X024123099X OK
X024123099XYA OK
X024123099XYAAXX99R OK
XX024 not OK
X02412AA99X not OK
X024123099XYAAXX9911 not OK

您可以使用OpenSauce的正则表达式,然后将其破解成碎片以允许部分匹配:

^[A-Z](\d{0,9}$|\d{9}([A-Z]{0,6}$|[A-Z]{6}(\d{0,2}$|\d{2}([A-Z]{0,2}$))))

它并不漂亮但据我所知它可以编码你的要求。

基本上我把每个案例都用在\\d{9}并用(\\d{0,9}$|\\d{9}<rest of regex>)替换它。

我添加了^$ ,否则它将匹配其他无效字符串中的子字符串。 例如,它会看到一个无效的字符串,如XX024并认为它没关系,因为它包含X024

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM