空字符串的模式是什么?

Rom*_*man 8 java regex

我需要验证输入:有效的变量是数字或空字符串.相应的正则表达式是什么?

String pattern = "\d+|<what shoudl be here?>";
Run Code Online (Sandbox Code Playgroud)

UPD:请不要建议"\ d*",我只是好奇如何在regexp中告诉"空字符串".

pol*_*nts 15

在这种特殊情况下,^\d*$可以工作,但一般来说,匹配pattern或空字符串,您可以使用:

^$|pattern
Run Code Online (Sandbox Code Playgroud)

说明

  • ^并且$分别是字符串锚点的开头和结尾.
  • |用于表示替代物,例如this|that.

参考

相关问题


关于多线模式的注意事项

在所谓多行模式(Pattern.MULTILINE/(?m)在Java中)时,^$匹配的开始和结束线来代替.现在\A\Z分别是字符串开头和结尾的锚点.

如果您处于多线模式,则匹配空字符串\A\Z.^$将匹配字符串中的空行.


例子

以下是一些例子来说明以上几点:

String numbers = "012345";

System.out.println(numbers.replaceAll(".", "<$0>"));
// <0><1><2><3><4><5>

System.out.println(numbers.replaceAll("^.", "<$0>"));
// <0>12345

System.out.println(numbers.replaceAll(".$", "<$0>"));
// 01234<5>

numbers = "012\n345\n678";
System.out.println(numbers.replaceAll("^.", "<$0>"));       
// <0>12
// 345
// 678

System.out.println(numbers.replaceAll("(?m)^.", "<$0>"));       
// <0>12
// <3>45
// <6>78

System.out.println(numbers.replaceAll("(?m).\\Z", "<$0>"));     
// 012
// 345
// 67<8>
Run Code Online (Sandbox Code Playgroud)

关于Java的注意事项 matches

在Java中,matches尝试将模式与整个字符串进行匹配.

这是真的String.matches,Pattern.matchesMatcher.matches.

这意味着有时候,matches当Java 对其他风格和/或其他Java正则表达式方法必要时,可以省略锚点.

相关问题


Kap*_*old 6

/^\d*$/
Run Code Online (Sandbox Code Playgroud)

匹配0或更多数字之前或之后没有任何内容.

说明:

'^'表示行首.'$'表示行尾.'*'匹配0或更多次出现.因此,模式匹配整个行与0或更多位数.