我已经开发了一个正则表达式来识别文本文件中的xml块.表达式看起来像这样(我删除了所有java转义斜杠以使其易于阅读):
<\?xml\s+version="[\d\.]+"\s*\?>\s*<\s*rdf:RDF[^>]*>[\s\S]*?<\s*\/\s*rdf:RDF\s*>
Run Code Online (Sandbox Code Playgroud)
然后我优化它并替换[\s\S]*?为.*?It突然停止识别xml.
据我所知,\s意味着所有的空格符号,\S意味着所有的非白色间隔符号或[^\s]因此[\s\S]逻辑上应该相当于.我没有用贪婪的过滤器,所以可能是什么区别?
Neu*_*ron 13
正则表达式.和\s\S不等价的,因为.默认情况下不追上线终止(如新行).
根据oracle网站,.比赛
任何字符(可能与行终止符匹配也可能不匹配)
行终止符是以下任何一种:
- 换行符(换行符)(
'\n'),- 一个回车符后面跟一个换行符(
"\r\n"),- 一个独立的回车符(
'\r'),- 下一行字符(
'\u0085'),- 行分隔符(
'\u2028')或- 段落分隔符(
'\u2029).
只要未设置必要的标志,这两个表达式就不相同.再次引用oracle网站:
如果
UNIX_LINES激活了模式,则识别的唯一行终止符是换行符.
.除非DOTALL指定了标志,否则正则表达式匹配除行终止符之外的任何字符.
| 归档时间: |
|
| 查看次数: |
7790 次 |
| 最近记录: |