Multiline Regex不适用于标签

时间:2014-09-17 18:46:39

标签: regex pcre textwrangler

我有一个大文本文件,其中包含TextWrangler中的一些注释,我想用Regex解析并将匹配写入CSV文件以进行MySQL导入。以下是一个示例来源:

ARCHIVE

02.09.2014 22:35 

title1
content
content
content
content

30.08.2014 18:13 

title2
content
    content with tab
    content with tab
content

...
more notes as above
...

每个音符都以返回包围的日期开头,然后是标题和一些内容行。我目前正在TW查找对话框中使用以下Regex进行测试,并选中Grep以获取每个注释的日期,标题和内容块:

\r(\d\d\.\d\d\.\d\d\d\d \d\d:\d\d)\s*\r\r(.+)(?s)((?:(?!\r\d\d\.\d\d\.\d\d\d\d \d\d:\d\d\s*\r).)*)

这样做的目的是查找返回包围的日期,然后捕获标题行,最后所有行都提供不会遇到另一个日期块。后者使用非捕获负向前瞻。在最后一步之前,使用(?s)启用DOTALL设置,包括点元字符的返回。

使用查找上方的示例源为第一个音符而不是第二个音符,其中一些行使用制表符缩进。 TW显示此错误:

enter image description here

这就是我被困的地方。谁能给我一个提示?

2 个答案:

答案 0 :(得分:0)

我对模式进行了更多测试,发现Regex / Grep失败实际上是不可预测的。

它似乎与源中的选项卡有关,但可能还有其他文本触发了该错误。例如,我发现当添加网址时,包含标签的工作“注释”部分开始失败。

我正在使用从Snow Leopard更新的Mavericks 10.9.4上的TextWrangler 3.5.3。我在Apple Mail和其他应用程序中也遇到过很多关于这个系统的模糊问题,所以我认为TW bug可能与Mavericks问题有关。我使用旧版TW的原因是我不喜欢左边的侧边栏。

正如我在评论中所说的那样,对于使用BBedit / TW的Grep问题还有其他问题,这些问题似乎不是来自PCRE Regex引擎,而是来自BBedit代码。当然,SO无能为力。

答案 1 :(得分:0)

不允许发表评论,我已回答' ...

  • 你的正则表达式在TW 4.5.9(10.9.5)中运行良好。
  • 它与"非捕获"同样有效。比特下降 - 在TW 4.5.9(10.9.5)。 (至少对于比赛,那就是。没有验证它的捕获。)
  • 在TW 4.5.9中,网址也不会引起问题。

可能

\r(\d{2}\.\d{2}\.\d{4} \d{2}:\d{2})\s*\r\r(.+\r)((.+\r)+)(?!\d{2}\.\d{2}\.\d{4} \d{2}:\d{2}\s*\r)

确实符合您的目的(在10.3.4的TW 3.5.3中。除了领先/尾随换行符(当然,如果实际需要可以添加),在TW 4.5.9中它的捕获似乎是与你的相同)。