Java 将字母数字值与至少一个数字匹配的正则表达式
我想匹配一个模式,该模式在字母数字字符之间包含连字符,连字符两侧至少有一个数字 我在Java中尝试了以下模式。但是下面提到的一些模式没有正确匹配Java 将字母数字值与至少一个数字匹配的正则表达式,java,regex,Java,Regex,我想匹配一个模式,该模式在字母数字字符之间包含连字符,连字符两侧至少有一个数字 我在Java中尝试了以下模式。但是下面提到的一些模式没有正确匹配 Pattern alpha_numeric = Pattern.compile("([a-zA-Z0-9]+\\-[0-9]+)|([0-9]+\\-[a-zA-z0-9]+)"); 理想情况下,应匹配的一些模式包括: a-45 45-a 45-45 a-aaa4 aaa4a-bbb5 a4aa-a etc 以下模式不应匹配: a-a b-b et
Pattern alpha_numeric = Pattern.compile("([a-zA-Z0-9]+\\-[0-9]+)|([0-9]+\\-[a-zA-z0-9]+)");
理想情况下,应匹配的一些模式包括:
a-45
45-a
45-45
a-aaa4
aaa4a-bbb5
a4aa-a etc
以下模式不应匹配:
a-a
b-b etc
我应该如何着手修复它?由于正则表达式的定义,有些模式不匹配 你的正则表达式说:
(alphanumeric string)-(numbers string) OR (numbers string)-(alphanumeric string)
您应该涵盖更多的情况并重写您的正则表达式。您必须考虑“至少一位”的要求,这在正则表达式中转换为
$ sed -r 's/([a-zA-Z0-9]*-[a-zA-Z]*[0-9][a-zA-Z0-9]*|[a-zA-Z]*[0-9][a-zA-Z0-9]*-[a-zA-Z0-9]*)/{\1}/g' file
{a-45}
{45-a}
{45-45}
{a-aaa4}
{aaa4a-bbb5}
{a4aa-a}
a-a
b-b
-
a-
-a
{-4}
{4-}
\d+-需要Java字符串中的转义符
例如:
public void test() {
final List<String> testCases = Arrays.asList("a-45",
"45-a",
"45-45",
"a-aaa4",
"aaa4a-bbb5",
"a4aa-a etc",
"a-a",
"b-b");
final String regex = "[a-z]*\\d+[a-z]*";
final String leftMatch = regex + "-.*";
final String rightMatch = ".*-" + regex;
for (String string : testCases) {
System.out.println(string + " : " + string.matches(leftMatch + "|" + rightMatch));
}
}
类似于“([a-zA-Z]*\d+[a-zA-Z]*\\-\d+)”(\d+\\-[a-zA-Z]*\d+[a-zA-Z]*)”的东西会起作用吗?我对这些正则表达式有点困惑。我写了一个条件,比如(字母数字)-(字母数字),但是不应该匹配的模式,比如a-a也被匹配。虽然这个正则表达式看起来有点长,但它似乎工作得很好。谢谢
a-45 : true
45-a : true
45-45 : true
a-aaa4 : true
aaa4a-bbb5 : true
a4aa-a etc : true
a-a : false
b-b : false