我需要一个正则表达式来匹配
%foo(%bar)或%foo。
我现在正在使用此代码:
String code = "%foo(%bar)";
code.matches("%+[\w&&[^_]][\w0-9]+[\w0-9&&[^_]]");
但它只适用于第二种情况。
编辑:我的正则表达式必须检查变量是否包含数字和字母,以及是否以_开头或以_结尾。我不希望与_%foo
或%foo_
或_%foo_
匹配。
答案 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+\))?