当前位置: 首页 > 知识库问答 >
问题:

版本差异?Java中的正则表达式转义

燕刚毅
2023-03-14

似乎正则表达式转义在不同版本的Java中工作方式不同。

>

  • 在Java openjdk 16.0中。1.编辑工作做得很好

    在Java openjdk 11.0中。11引发此编译错误:

    test.java:15: error: illegal escape character
            if (variable.matches("\s*")){
    

    我知道,我通常对\\是安全的。我的问题:

    自从哪个版本改变了这种行为?为什么会这样?

  • 共有2个答案

    欧阳晗日
    2023-03-14

    Java 15引入了\s,作为语言标准中表示“空格”(unicode 0x20)的有效转义序列。

    无效的转义序列生成编译时错误(也在上面的链接中)。因为在Java15之前,转义序列是无效的,所以它抛出了一个错误。从Java15开始,它是一个有效的转义序列。

    范楚
    2023-03-14

    这就是您发现的带来更改的功能。

    JavaTextBlock功能。

    它是在Java13中引入的,第二个预览包含在Java14个文本块第二个预览中。

    根据文本块第二次预览

    新的转义序列简单地转换为单个空格(\u0020)。

    \s转义序列可用于文本块和传统字符串文本。

    这个关于文本块的新特性也正式包含在Java 17的LTS版本中。

     类似资料:
    • 昨天,我需要向正则表达式添加一个文件路径,创建一个如下所示的模式: 一开始正则表达式不匹配,因为包含几个正则表达式特定的符号,如 或 。作为快速修复,我将它们替换为 和 . 与 . 然而,我问自己,是否没有一种更可靠或更好的方法来清除正则表达式特定符号中的字符串。 Python 标准库中是否支持此类功能? 如果没有,您是否知道一个正则表达式来识别所有正则表达式并通过替代品清理它们?

    • 有人能告诉我以下示例中的和运算符之间的区别吗:

    • 我正在搜索正则表达式-"。(冲突的副本。"。我为此写了以下代码 但我有个例外 异常在线程"main"中java.util.regex.Pattern Syn的异常:索引15附近的未关闭组。( 我知道编译器认为是模式组的开始。我试图通过添加来逃避),但这不起作用。 有人能告诉我怎么逃走吗?

    • 问题内容: 当匹配某些字符(例如换行符)时,可以使用正则表达式“ \\ n”或仅使用“ \ n”。例如,以下将字符串拆分为行数组: 但是以下内容同样适用: 我的问题: 上面两个是 完全 一样地工作,还是有细微的差别?如果是后者,能否举个例子,说明您得到不同的结果? 还是仅在[可能/理论]表现上有所不同? 问题答案: 在当前情况下没有区别。通常的字符串转义序列是在单个反斜杠的帮助下形成的,然后有效的

    • 我试图将js代码转换为java版本,但对正则表达式有点困惑:在js中,我有一个类似于:testString的表达式。拆分(“/(\w*\d)/g”) 我可以在java中使用什么等效语言?我试着用匹配器得到同样的结果。find()和split函数,但结果不一样。

    • 问题内容: 我正在尝试输入之间的内容,我的模式没有做正确的事,请帮忙。 下面是sudocode: 要求的输出: 之一 二 三 问题答案: 先行使用并在循环中使用,而不是: 看到它在线上工作:ideone 但是最好在这里使用split: 看到它在线上工作:ideone