难以理解Java正则表达式解释

时间:2020-01-21 19:32:26

标签: java regex

有人可以通过以下Java正则表达式来帮助我吗?我做了一些研究,但是很难把所有东西放在一起。

正则表达式:

"^-?\\d+$"

我对每个符号的理解:

  1. " =匹配行的开头
  2. - =表示范围
  3. ? =不会发生或只会发生一次
  4. \\d =匹配数字
  5. + =匹配先前的一项或多项。
  6. $ =匹配行尾

正则表达式是否说它只想要以数字开头或结尾的匹配项?但是-?进入哪里?

3 个答案:

答案 0 :(得分:5)

-仅在字符类别(即方括号[])内时指示范围。否则,它是与其他字符一样的普通字符。考虑到这一点,此正则表达式匹配以下示例:

  • "-2"
  • "3"
  • "-700"
  • "436"

即正整数或负整数:至少一位数字,可以选择在其后加上减号。

答案 1 :(得分:3)

某些正则表达式已组成,就像现在一样,读取正则表达式的正确方法是:

  • ^的开头
  • -?可选减号
  • \\d+一个或多个数字
  • $的结尾

此正则表达式匹配任何正数或负数,例如0-15558-19663,...

详细信息请查看此好帖子Reference - What does this regex mean?

答案 2 :(得分:3)

"^-?\\d+$"不是正则表达式,它是Java字符串文字。

一旦编译器解析了字符串文字,字符串值就是^-?\d+$,它是这样的正则表达式匹配:

^    Matches beginning of input
-    Matches a minus sign
?      Makes previous match (minus sign) optional
\d   Matches a digit (0-9)
+      Makes previous match (digit) match repeatedly (1 or more times)
$    Matches end of input

总而言之,正则表达式匹配无限长的正整数或负整数。

注意: -仅表示在[]字符类中的范围,例如[4-7]'4''7'之间的字符范围,而[3-][-3]不是范围,因为缺少起始/结束值,因此它们都只需匹配一个3-字符即可。

相关问题