Java Regex Subexpressions

时间:2016-07-04 18:17:02

标签: java regex

我尝试创建匹配特定字符串的正则表达式模式,如果字符串与模式匹配则返回true,如果不匹配,则返回false。以下是条件:

  1. 必须以[开头,以]
  2. 结尾
  3. 括号内的每个项目都必须用逗号分隔
  4. 以逗号分隔的每个项目都必须遵循此正则表达式模式: ^[A-Za-z][A-Za-z0-9_]*$
  5. 如何制作一个检查所有这些条件的正则表达式?

2 个答案:

答案 0 :(得分:3)

附上可重复的小组:

\[[A-Za-z][A-Za-z0-9_]*(?:,[A-Za-z][A-Za-z0-9_])*\]

这应该出现在最终字符串中。根据特定语言逃避特价。

答案 1 :(得分:2)

在Java中,没有\w标志的Pattern.UNICODE_CHARACTER_CLASS实际上与[a-zA-Z0-9_]相同。所以,我会用

String pat = "\\[[a-zA-Z]\\w*(?:,[a-zA-Z]\\w*)*]";

请参阅IDEONE demo。与String#matches一起使用,或者您必须在开头添加^(或\\A),最后添加$(或\\z)。

String pat = "\\[[a-zA-Z]\\w*(?:,[a-zA-Z]\\w*)*]";
System.out.println("[c1,T4,yu5]".matches(pat)); // TRUE

模式说明

  • \\[ - 文字[
  • [a-zA-Z] - 英文字母(与\\p{Alpha}相同)
  • \\w* - 来自[a-zA-Z0-9_] set
  • 的零个或多个字符
  • (?: - 开始非捕获组匹配...
    • , - 逗号
    • [a-zA-Z]\\w* - 见上文
  • )* - ...零次或多次
  • ] - 文字](不需要在字面上进行字面处理之外的转义)。