2.8多行匹配模式

2.8 多行匹配模式

问题

你正在试着使用正则表达式去匹配一大块的文本,而你需要跨越多行去匹配。

解决方案

这个问题很典型的出现在当你用点(.)去匹配任意字符的时候,忘记了点(.)不能匹配换行符的事实。

比如,假设你想试着去匹配C语言分割的注释:

为了修正这个问题,你可以修改模式字符串,增加对换行的支持。比如:

在这个模式中, 指定了一个非捕获组

(也就是它定义了一个仅仅用来做匹配,而不能通过单独捕获或者编号的组)。

讨论

函数接受一个标志参数叫 ,在这里非常有用。

它可以让正则表达式中的点(.)匹配包括换行符在内的任意字符。比如:

对于简单的情况使用 标记参数工作的很好,

但是如果模式非常复杂或者是为了构造字符串令牌而将多个模式合并起来,这时候使用这个标记参数就可能出现一些问题。

如果让你选择的话,最好还是定义自己的正则表达式模式,这样它可以在不需要额外的标记参数下也能工作的很好。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181123G0GMDZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券