当前位置: 首页 > 面试题库 >

为什么Java和Perl中的正则表达式行为不同?

陶柏
2023-03-14
问题内容

我的理解是Java的正则表达式实现是基于Perl的。但是,在下面的示例中,如果我使用相同的字符串执行相同的regex,则Java和Perl返回不同的结果。

这是Java示例:

public class RegexTest {
    public static void main( String args[] ) {
        String sentence = "This is a test of regular expressions.";
        System.out.println( sentence.matches( "\\w" ) ? "Matches" : "Doesn't match" );
    }
}

返回值:不匹配

这是Perl的示例:

my $sentence = 'This is a test of regular expressions.';
print ( $sentence =~ /\w/ ? "Matches" : "Doesn't match" ) . "\n";

返回:匹配项

对我来说,Perl的结果很有意义。它寻找单个单词字符的匹配项。我不明白为什么Java不认为这是一个匹配。差异的原因是什么?


问题答案:

Java
matches方法正在测试正则表达式是否与整个匹配String。要测试是否可以在字符串的任何位置找到正则表达式,请创建一个Matcher并使用其find方法。



 类似资料:
  • 主要内容:匹配操作符,实例,正则表达式变量,实例,替换操作符,实例,转化操作符,实例,更多正则表达式规则正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 Perl语言的正则表达式功能非常强大,基本上是常用语言中最强大的,很多语言设计正则式支持的时候都参考Perl的正则表达式。 Perl的正则表达式的三种形式,分别是匹配,替换和转化: 匹配:m/ /(还可以简写为/ /,略去

  • 正则表达式(regular expression)描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 Perl语言的正则表达式功能非常强大,基本上是常用语言中最强大的,很多语言设计正则式支持的时候都参考Perl的正则表达式。 Perl的正则表达式的三种形式,分别是匹配,替换和转化: 匹配:m//(还可以简写为//,略去m) 替

  • 有几个问题,但没有回答我的问题。我希望使用pattern和matcher在字符串中找到一个模式,然后从那里创建一个匹配列表,其中包括不匹配的其余部分。 我目前的结果: 假的 我的预期结果应该在列表中: ["125t","160f"]//我知道如何在python中做到这一点,但不知道如何在java中做到这一点。所以有人能帮我吗?

  • 我使用BufferedReader读取了一个txt文件。我将每一行添加到一个长字符串中,并将前面发布的代码应用于此。整个代码如下: 文本文件是一篇我想删除不是字母的所有内容(包括空白空间)的普通文章。摘录如下:“[16]自由软件基金会(FSF)成立于1985年,其本意是”自由“一词指的是发行的自由。”

  • 问题内容: 以下代码在Java 8和9中都可以编译,但是行为不同。 当我使用Java 8运行它时,它返回: 但是当我用Java 9运行它时,输出却不同: 为什么? 问题答案: 在Java文档是Unicode标准的一致性出来。Javadoc弄混了应该匹配的内容。内容为: 任何Unicode换行符序列都等效于 该Java文档是错误的。在R1.6换行符的小节中,有关正则表达式的Unicode技术标准#1

  • 问题内容: 您如何将该Perl正则表达式转换为Java? 编译时,对我而言它不匹配“ PattErn”,但失败 问题答案: 您如何将该Perl正则表达式转换为Java? 你不能 造成这种情况的原因很多。这里有一些: Java不像Perl那样支持正则表达式语言。它缺少字形支持(如和完整属性支持(如),缺少Unicode命名字符,没有分支重置运算符,在Java 7之前没有命名捕获组或逻辑转义,没有递归