正则表达式匹配数字、逗号和分号?

38

如何编写一个正则表达式,仅匹配由数字0到9、逗号和分号组成的字符串?我想在Java中这样使用它:

word.matches("^[1-9,;]$") //Or something like that...

我对正则表达式很陌生。


你很接近了 - 你认为 1-9 是什么意思? - a'r
除此之外,“1-9”可能无法像“0-9”一样匹配0到9。 - Daniel DiPaolo
哇,谢谢大家。一定太简单了。 - Calum Murray
6个回答

67
你已经接近正确了,只是忘记加上0并且忘记了量词。
word.matches("^[0-9,;]+$")

35

您已经完成了90%的工作。

^[0-9,;]+$

以脱字符号^开头表示行的开头。

[表示字符集开始

0-9表示0到9的数字,逗号,表示逗号,分号表示;

闭合的]表示字符集的结束。

加号+表示"前一个条目"必须出现一次或多次。在这种情况下,它意味着您必须有先前声明的字符集中的一个或多个字符。

美元符号$表示行的结尾。


我认为 ^ $ 也可以表示任何输入的开头和结尾(可以是一个长长的字符串作为整个文本文件),而不仅仅是一行的开头和结尾。但这个特性取决于正则表达式的实现。 - Gab是好人
如果有人决定创建一个正则表达式语言,其中'^$'表示任何输入,那么为什么还要使用点'.'和星号'*'运算符呢?我并不怀疑有人可能会这样做,但这基本上意味着你无法匹配空行(这很愚蠢)。 - Edwin Buck
因此,在本教程中讨论的所有正则表达式引擎都有扩展两个锚点含义的选项。"^"匹配字符串的开头,"$"匹配字符串的结尾。因此,将它们匹配为行的开头和结尾是一种选择,但不建议这样做。 - Gab是好人
@Gab 看起來著重於Perl正則表達式和一些兼容的“擴展”GNU功能,可能會被大量使用;但實際上這並不是唯一的方法。事實上,有許多類似但微妙不同的方式可以構建“輸入字符串”以設置正則表達式。正則表達式匹配的實際機制受生成的DFA控制,這對於那些不知道的人來說是一個數學構造,所以實際的“引擎”只能以一種方式執行(雖然存在漏洞)。看起來該擴展簡化了整行匹配,但使捕獲空行變得困難。 - Edwin Buck
@EdwinBuck 空行可以通过 /(^|\n)(\n|$)/ 表达式捕获。或者,使用 PCRE,可以通过 /m 修饰符(即:/^$/m)来捕获。此外,/s 修饰符使得 . 字符类甚至匹配 \n,允许它跨行收集字符。正则表达式中有很多需要注意的地方,但这不是其中之一。 - Gerard ONeill

5
尝试使用 word.matches("^[0-9,;]+$");

4

word.matches("^[0-9,;]+$"); 你已经接近成功了


1

0
boolean foundMatch = Pattern.matches("[0-9,;]+", "131;23,87");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接