我想要传递的例子是:
我不想传递的例子是:
基本上想要“......”
或
一串a-z,可以包括但不以点或短划线开头 (可选地后跟*)(可选地后跟属性/值列表)
群组:
我目前的正则表达式是:
"^([a-z]+[a-z.\\-]*)([\\*]*)[\\[]*([^\\]]*)[\\]]*"
...如果只有“..”,或者如果第一组以字母开头但以点或短划线结束,则不起作用。我试图让它适用于这两种情况的所有事情都搞砸了整个事情。
感谢所有帮助。
通过下面我的评论中的正则表达式并更改了与此正则表达式一起使用的代码,我让它为“..”工作,但是,我还没有让它与第一个以字母结尾的组一起工作只要。我尝试将[a-z] + $添加到该组的末尾:
"^(\\.\\.|^([a-z]+[a-z.\\-]*[a-z]+$)([\\*]*)[\\[]*([^\\]]*)[\\]]*)$"
......但这会导致后者的问题
答案 0 :(得分:0)
此正则表达式似乎符合您的问题中指定的要求:
^(?:(\.{2})|([a-z]+\.?[a-z]*\*?)\s?\[?(?:(@\w+="\w+")(?:\sand\s)?)*\]?)$
我假设您能够进行开始/结束行断言,因为您正在尝试制作它们。如果没有,请分别从开头和结尾删除'^'和'$'。
在java中,使用此代码运行:
Pattern regex = Pattern.compile("^(?:(\\.{2})|([a-z]+\\.?[a-z]*\\*?)\\s?\\[?(?:(@\\w+=\"\\w+\")(?:\\sand\\s)?)*\\]?)$", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Matcher matcher = regex.matcher("target string");
if (matcher.matches()) {
for (int i = 1; i <= matcher.groupCount(); i++) {
String targetGroup = matcher.group(i)
}
}
希望这有帮助。