正则表达式匹配文本块

时间:2015-03-22 03:50:47

标签: regex

我有一些格式化的文字。

Lorem ipsum dolor sit amet, consetetur sadipscing elitr
sed diamnonumy eirmod tempor invidunt ut labore et dolo
re magna aliquyam erat, sed diam voluptua. At vero eose
t accusam et justo duo dolores et ea rebum. Stet clita 
kasd gubergren, no sea takimata sanctus est Lorem ipsum
dolor sit amet.
Ipsum dolor sit amet, consetetur sadipscing elitr, sed 
diam nonumy eirmod tempor invidunt ut labore et dolore
magna aliquyam erat, sed diam voluptua. Atero eos et a
ccusam et justo duo dolores et ea rebum.

我需要匹配并包括部分线(不同长度的第一行)。

在上面的文字中,模式将匹配:

Lorem ipsum dolor sit amet, consetetur sadipscing elitr
sed diamnonumy eirmod tempor invidunt ut labore et dolo
re magna aliquyam erat, sed diam voluptua. At vero eose
t accusam et justo duo dolores et ea rebum. Stet clita 
kasd gubergren, no sea takimata sanctus est Lorem ipsum
dolor sit amet.

如果我知道每行的长度,我可以使用(.{0,30})+.{0.29},但遗憾的是我没有。{/ p>

我正在使用GLib正则表达式,它们基本上都是perl regex。

半无关:这是一个更大的正则表达式的一部分,它将用于 desc 子组。

/\s?>\s?(?<cmd>.+)$\n(?:(?:^.*$\n)*^\s*$\n)?^(?<name>[A-Z][a-zA-Z']*(?: [a-z]{1,3}| [A-Z][a-z']{3,})*) ?(?:[,([{-].*)?$\n(?<desc>(?:^.+$\n)+)/m

1 个答案:

答案 0 :(得分:0)

如果你可以假设每个&#34;完成&#34; line是54-55个字符宽加一个换行符,最后的部分行在一段时间内结束:

/(?:^.{55}\n)+^.{0,54}\.\n/

应该能满足您的需求。另一种解决方案可能是将所有内容都放到以.\n结尾的第一行:

/.*?\.[\n\z]/m

否则,您需要更清楚地定义构成&#34;完整&#34; vs&#34; partial&#34;线;据我所知,没有像#34;捕获组中的数据长度这样的概念&#34;在PCRE中,因此您无法处理任意行长度。