具有重复模式的正则表达式

时间:2015-10-10 09:55:03

标签: java regex

我需要一个正则表达式来匹配

%foo(%bar)或%foo。

我现在正在使用此代码:

String code = "%foo(%bar)";
code.matches("%+[\w&&[^_]][\w0-9]+[\w0-9&&[^_]]");

但它只适用于第二种情况。

编辑:我的正则表达式必须检查变量是否包含数字和字母,以及是否以_开头或以_结尾。我不希望与_%foo%foo__%foo_匹配。

2 个答案:

答案 0 :(得分:1)

正确的Java正则表达式将是

Pattern pat = Pattern.compile("%\\w+(?:\\(%\\w+\\))?");

在第一个或最后一个地方没有下划线:

Pattern pat = Pattern.compile("%[\\w&&[^_]]\\w*[\\w&&[^_]]" +
                                  "(?:\\(%[\\w&&[^_]]\\w*[\\w&&[^_]]\\))?");

此模式要求名称中至少包含两个字符。如果应该接受单个非下划线,则第二和第三部分可以是可选的:

    Pattern pat = Pattern.compile("%[\\w&&[^_]](?:\\w*[\\w&&[^_]])?" +
                                  "(?:\\(%[\\w&&[^_]](?:\\w*[\\w&&[^_]])?\\))?");

答案 1 :(得分:0)

假设%foo%bar是以%符号开头的单词,则正则表达式为:

%\w+(\(%\w+\))?