正则 [.\n]* (.|\n)* 区别

博客探讨了在正则表达式中,^[. ]* 和 (.| )* 的区别。前者无法匹配连续多行文本,而后者可以。问题源于字符组内部元字符的不同定义,点号(.)在字符组内不代表所有非换行符字符,而是其本身,导致无法按预期工作。解决方案是使用^[.\w\s]*。

实例: 

Do you like the regular expression.\

    I think so.


如果希望匹配连续多行文本,比如上面的代码内容:一个逻辑行可以分为许多现实的行,每一行以反斜线结尾。

曾经我写过的代码为:^[.\n]*

 理由:.号匹配除换行符\n之外任何单字符,当然包括反斜线\,\n匹配换行符。似乎很不错,但结果却无法匹配。

 这个问题曾经也让我纳闷了一段时间。如果换成(.|\n)*则OK。

 

为什么^[.\n]*无法匹配上例文本?

 原因:

 字符组内部,元字符的定义与外部是不一样的。在字符组内部,只有连字符“-”且连字符不能出现在字符组的开头,它才属于元字符,表示一个范围。

 比如[1-9],等同于[123456789]

 [-19],它可以匹配字符-19。这里的-不属于元字符

 因此,本篇文章介绍的^[.\n]*中的.号,并不是我们认为的除换行符\n之外的任何单字符,它代表的就是字符.。当然无法匹配我们想要的结果。

 我们可以写为:^[.\\\w\s]*

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值