正则表达式 - 匹配不以字符结尾的多行
Regex - Match multiple lines that don't end with character
我一直在为我目前遇到的一个特定的正则表达式问题绞尽脑汁。
我想匹配可以跨越多行的值。
如果数据跨越多行,它将以 space 而不是下划线“_”结尾,但该行中可能存在有效文本,该文本将在“This _is”之前添加 space 和下划线。
参见下面的文本示例:
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
我不关心内容匹配,只是确保我得到正确的行尾匹配。
Edit:
See Robby's negative look behind solution below.
Had tried it with some additional logic earlier which turned out to be to complicated for my regex provider to handle, simplified it and it worked a treat.
此 PCRE 表达式应提供所需的结果:
/^.*?(?<! _)$/gms
这是结合多行标志 (m
) 使用负向后回顾 (?<! _)
来匹配前面没有 _
的行尾。单行标志 (s
) 确保点也匹配换行符。
这里是 regex101 example。
我一直在为我目前遇到的一个特定的正则表达式问题绞尽脑汁。
我想匹配可以跨越多行的值。 如果数据跨越多行,它将以 space 而不是下划线“_”结尾,但该行中可能存在有效文本,该文本将在“This _is”之前添加 space 和下划线。
参见下面的文本示例:
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
我不关心内容匹配,只是确保我得到正确的行尾匹配。
Edit: See Robby's negative look behind solution below.
Had tried it with some additional logic earlier which turned out to be to complicated for my regex provider to handle, simplified it and it worked a treat.
此 PCRE 表达式应提供所需的结果:
/^.*?(?<! _)$/gms
这是结合多行标志 (m
) 使用负向后回顾 (?<! _)
来匹配前面没有 _
的行尾。单行标志 (s
) 确保点也匹配换行符。
这里是 regex101 example。