【问题标题】:Regex - Match multiple lines that don't end with character正则表达式 - 匹配不以字符结尾的多行
【发布时间】:2017-03-31 05:05:04
【问题描述】:

我一直在为我目前遇到的一个特定的正则表达式问题绞尽脑汁。

我想匹配可能跨越多行的值。 如果数据跨越多行,它将以空格结尾,而不是下划线“_”,但行中可能有有效文本,其前面有空格和下划线“This _is”。

请参阅以下文本示例:

This is d_ata 1
_This is _
data 2
This _is data 3a
This _
is _
data 4

结果如下

第 1 场比赛

This is d_ata 1

第 2 场比赛

_This is _
data 2

第 3 场比赛

This _is data 3a

第 4 场比赛

This _
is _
data 4

我不关心内容匹配,只是确保我得到正确的行尾匹配。

编辑: 请参阅下面的 Robby 对解决方案的负面看法。

之前尝试了一些额外的逻辑,结果证明对我的正则表达式提供者来说处理起来很复杂,简化了它,它奏效了。

【问题讨论】:

  • 我不明白用于达到您预期输出的逻辑。
  • @TimBiegeleisen 行尾的 `_` 是一个连续字符,表示数据将在下一行继续。就像 bash 和 Java 属性文件中行尾的 ``。

标签: regex multiline nsregularexpression


【解决方案1】:

此 PCRE 表达式应提供所需的结果:

/^.*?(?<! _)$/gms

这是使用负后向 (?&lt;! _) 结合多行标志 (m) 来匹配前面没有 _ 的行尾。单行标志 (s) 确保点也匹配换行符。

这是regex101 example

【讨论】:

  • 有这个精确的语法(在我尝试过的许多其他语法中),在行的开头有一些额外的匹配。鉴于这对您有用,我简化了一些起始逻辑并且它有效。事实证明,一开始的额外逻辑对于正则表达式查询来说太复杂了。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-17
  • 2016-03-26
  • 2015-08-01
  • 2018-07-21
  • 1970-01-01
  • 2015-09-28
  • 2011-09-23
相关资源
最近更新 更多