gpt4 book ai didi

java - [\s\S]* 有什么区别?和 。*?在 Java 正则表达式中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:10:07 24 4
gpt4 key购买 nike

我开发了一个正则表达式来识别文本文件中的 xml block 。表达式如下所示(我删除了所有 java 转义斜杠以使其易于阅读):

<\?xml\s+version="[\d\.]+"\s*\?>\s*<\s*rdf:RDF[^>]*>[\s\S]*?<\s*\/\s*rdf:RDF\s*>

然后我优化了一下,把[\s\S]*?换成.*? 突然不识别xml了。

据我所知,\s 表示所有空白符号,\S 表示所有非空白符号或 [^\s] 所以 [\s\S] 在逻辑上应该等同于 我没有使用贪心过滤器,那么有什么区别呢?

最佳答案

正则表达式 .\s\S 不等价,因为 . 不捕获行终止符(如换行符)默认情况下。

根据oracle website , . 匹配

Any character (may or may not match line terminators)

而行终止符是以下任何一种:

  • A newline (line feed) character ('\n'),
  • A carriage-return character followed immediately by a newline character ("\r\n"),
  • A standalone carriage-return character ('\r'),
  • A next-line character ('\u0085'),
  • A line-separator character ('\u2028'), or
  • A paragraph-separator character ('\u2029).

这两个表达式是不等价的,只要没有设置必要的标志。再次引用oracle网站:

If UNIX_LINES mode is activated, then the only line terminators recognized are newline characters.

The regular expression . matches any character except a line terminator unless the DOTALL flag is specified.

关于java - [\s\S]* 有什么区别?和 。*?在 Java 正则表达式中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35248876/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com