Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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,我不明白为什么这个正则表达式返回false Pattern.matches("\\bi", "an is"); 我的角色在一个词的边界上 如果使用匹配项,则整个字符串必须匹配: Pattern.matches(".*\\bi.*", "an is") 这允许前后有0个或更多字符。或: boolean anywhere = Pattern.compile("\\bi").matcher("an is").find(); 将告诉您是否有子字符串匹配(在本例中为true)。需要注意的是,编译正则

我不明白为什么这个正则表达式返回false

Pattern.matches("\\bi", "an is");
我的角色在一个词的边界上

如果使用匹配项,则整个字符串必须匹配:

Pattern.matches(".*\\bi.*", "an is")
这允许前后有0个或更多字符。或:

boolean anywhere = Pattern.compile("\\bi").matcher("an is").find();

将告诉您是否有子字符串匹配(在本例中为true)。需要注意的是,编译正则表达式然后保留它们可以提高性能。

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

这是真实的,和

如果要检查字符串中是否有匹配项,可以使用
*\bi.*
。在本例中,作为Java字符串文本,它是
“*\\bi.*”

java.util.regex.Matcher
API链接
  • :尝试根据图案匹配整个区域

*
是什么意思 这里使用的点
是一个regex元字符,表示(几乎)任何字符
*
是一个正则表达式元字符,表示“零次或多次重复”。例如,类似于
A.*B
的内容匹配
A
,后跟零个或多个“any”字符,后跟
B
()

工具书类
相关问题
请注意,
*
(以及其他元字符)可能会失去其特殊意义,具体取决于它们出现的位置
[.*]
是一个字符类,它匹配文字句点
或文字星号
*
。前面加反斜杠也会转义元字符,因此
a\.b
匹配
“a.b”


相关问题 Java没有基于正则表达式的,和。您仍然可以使用
匹配
完成以下相同的操作:

  • 匹配(“.*pattern.*”)
    -它是否在任何地方包含该模式的匹配项
  • 匹配(“pattern.*)
    -它是否以模式匹配开始
  • 匹配(“.*pattern”)
    -是否以模式匹配结束

String
API快速备忘单 下面是一个快速备忘单,列出了哪些方法是基于正则表达式的,哪些不是:

  • 非正则表达式方法:
  • 正则表达式方法:

我不明白为什么Java决定与Perl等多年来本机支持regex的语言背道而驰。我抛弃了标准的Java正则表达式,开始使用自己的perl风格的Java正则表达式库,名为。请参见下面的正则表达式在Java中的意义

方法matches返回一个布尔值,表示是否有正则表达式匹配

matches("Sergio Oliveira Jr.", "/oliveira/i" ) => true
方法match返回一个数组,其中包含匹配的组。因此,它不仅告诉您是否有匹配项,而且还返回匹配的组,以防您有匹配项

match("aa11bb22", "/(\\d+)/g" ) => ["11", "22"]
方法sub允许您使用regex执行替换

sub("aa11bb22", "s/\\d+/00/g" ) => "aa00bb00"
支持全局和不区分大小写的正则表达式

match("aa11bb22", "/(\\d+)/" ) => ["11"]
match("aa11bb22", "/(\\d+)/g" ) => ["11", "22"]
matches("Sergio Oliveira Jr.", "/oliveira/" ) => false
matches("Sergio Oliveira Jr.", "/oliveira/i" ) => true
允许您更改转义字符,以防您不喜欢看到这么多“\”

match("aa11bb22", "/(\\d+)/g" ) => ["11", "22"]
match("aa11bb22", "/(#d+)/g", '#' ) => ["11", "22"]

在哪里可以找到。*???的语法???谢谢你提到了几乎所有的字符串或正则表达式方法,除了。:)@马修:是的,我只特别列出了
java.lang.String
中的那些。我的意思是,如果我真的想涵盖所有内容(例如编译),我可以写一篇文章。不过,我不确定我是否真的应该这样做。最好将
contains(CharSequence s)
与包含符号的字符串一起使用,例如
%
。我遇到了这个问题,
matches(.*pattern.*)
在将
aaa(%)
与完全相同的字符串进行比较时返回false,尽管
等于(字符串s)
包含(字符序列s)
返回true;我将在某个时候将编译模式合并到我的答案中。