Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将字符与正则表达式精确匹配一次_Java_Regex - Fatal编程技术网

Java 将字符与正则表达式精确匹配一次

Java 将字符与正则表达式精确匹配一次,java,regex,Java,Regex,在Java中,如何将一个字符与正则表达式精确匹配一次?假设我想寻找只包含一次数字3的字符串,不管它在哪里 我试着用“*3{1}.*”来做这件事,但显然这也会匹配“330”,因为我指定了句点,我不在乎它是什么字符。我怎样才能解决这个问题 ^[^3]*3[^3]*$ 匹配(不是三个),然后三个,然后(不是三个) 编辑:在开头和结尾添加^和$。这将迫使正则表达式匹配整行。感谢@Bobbyrogers和@Mindastic非正则表达式解决方案: int index = s.indexOf('3');

在Java中,如何将一个字符与正则表达式精确匹配一次?假设我想寻找只包含一次数字3的字符串,不管它在哪里

我试着用“*3{1}.*”来做这件事,但显然这也会匹配“330”,因为我指定了句点,我不在乎它是什么字符。我怎样才能解决这个问题

^[^3]*3[^3]*$
匹配(不是三个),然后三个,然后(不是三个)

编辑:在开头和结尾添加
^
$
。这将迫使正则表达式匹配整行。感谢@Bobbyrogers和@Mindastic

非正则表达式解决方案:

int index = s.indexOf('3');
boolean unique = index != -1 && index == s.lastIndexOf('3');

基本上,如果第一次和最后一次出现在同一个位置,并且存在于字符串中(不是-1),则字符是唯一的。

您可以举一些例子,通过还是不通过?这将不会检查整个字符串,并将与示例“330”中的前3个匹配。如果要检查整个字符串是否只包含一个3,则需要使用
^
$
指定。我认为您的regexp缺少一些内容。它应该是^[^3]*3[^3]*$,因为如果不是,它将匹配4444344443,例如。@Mindastic:这取决于APIString.matches()强制模式匹配整个字符串,因此不需要锚定。