首页 新闻 会员 周边 捐助

正则表达式中的 .* 只能匹配单行内容

0
[已关闭问题] 关闭于 2025-07-22 14:30

点号 . 通常不匹配换行符 \n

关键事实
. 不匹配换行符:

在大多数正则引擎中(包括 sed, grep, perl 等),元字符 . 默认不匹配换行符 \n

因此 .* 只能匹配当前行内的任意字符序列

^ 和 $ 的默认行为:

^ 匹配行首(不是文件开头)

$ 匹配行尾(不是文件结尾)

在多行文本中,它们只作用于当前行

_java_python的主页 _java_python | 小虾三级 | 园豆:984
提问于:2025-07-22 14:27
< >
分享
所有回答(1)
0

.* 天生是单行的:默认只能匹配当前行内的内容

测试文件 test.txt
text
first line
second line
third line

  1. 单行匹配(默认行为)
    bash

尝试匹配跨两行的内容

grep 'first.*second' test.txt

无输出(失败)

  1. 原因分析
    第一行:first line → . 匹配 line 但不能跨到下一行

第二行:second line → 单独处理

两行之间被换行符 \n 隔开,而 . 不匹配 \n

可以通过以下方式实现跨行匹配:

  • sed:用N命令合并行后匹配\n
    sed -n '/^it/{N; /\nnginx/p}' file
    
  • grep:用-z选项(将文件视为单行)
    grep -Pzo 'it.*nginx' file
    
_java_python | 园豆:984 (小虾三级) | 2025-07-22 14:30
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册