【问题标题】:RegExp End of Line正则表达式行尾
【发布时间】:2011-08-24 17:22:38
【问题描述】:

我正在尝试查找不以 </url> 结尾的行

这是我目前得到的正则表达式。

\<\/url\>

我可以找到&lt;/url&gt;,但我正在寻找最后缺少的行。

我的数据如下所示:

<url><loc>blah1 blah1 blah1</loc></url>    
<url><loc>blah2 blah2 blah2    
<url><loc>blah3 blah3 blah3</loc></url>

在这个例子中,我试图找到看起来像 blah2 的行

提前致谢!

【问题讨论】:

  • 这应该是html吗?因为在那种情况下,使用正则表达式是不可能的......
  • 你可能会觉得这个页面很有趣:stackoverflow.com/questions/1732348/…
  • 这可能与简单的文本功能有关
  • 我最终在 .NET 中编写了一些东西来解析文件并添加缺少的结束标记。从来没有让正则表达式在 DreamWeaver 查找/替换中工作。

标签: regex dreamweaver


【解决方案1】:

只要行尾没有空格,这个正则表达式就应该为你工作:

/^.*?(?<!<\/url>)$/

编辑这是另一个更复杂的解决方法,无需后视:

^.*?([^>]|[^l].|[^r].{2}|[^u].{3}|[^/].{4}|[^<].{5})$

【讨论】:

  • +1 您在我发布前几秒钟发布了完全相同的内容。 :-)
  • 这里是negative lookbehinds 的信息,这里是an example。
  • @Wiseguy 不错。并 +1 删除它并保持问题干净。
  • 我在 DreamWeaver 中使用这个正则表达式进行查找和替换。 DW 在尝试使用此正则表达式时抛出此错误...无效量词 ?)$/
  • @Danilo: ^[\W\w]*$ 将匹配整个文件,因为* 是贪婪的;要匹配单个行,您将使用 ^[\W\w]*?$。我不知道 Dreamweaver,但通常在使用正则表达式查找/替换的编辑器中,多行模式是默认设置。在 EditPad Pro 中,您甚至无法将其关闭;在极少数情况下,您需要仅匹配开头或结尾,您可以使用\A 和\z。在 DW 中可能会有所不同,因为 JavaScript 不支持这些锚点,但我仍然希望多行模式成为默认模式。
【解决方案2】:

试试这个:

^(?:(?!</url>$).)*$

这实际上是^.*$,但每次. 即将匹配时,前瞻都会尝试匹配&lt;/url&gt;,然后是行尾。如果成功,则匹配失败。

但是,我注意到示例中的前两行以几个空格字符结尾。如果你的真实数据是这样,你需要在前瞻中考虑到它:

^(?:(?!</url>[ \t]*$).)*$

这也将匹配一个完全空的行。如果您希望至少需要一个字符,可以将* 更改为+:

^(?:(?!</url>$).)+$

...或者您可能只想匹配 start 与 &lt;url&gt;:

的行
^<url>(?:(?!</url>$).)$

【讨论】:

  • 我正在处理的数据行的末尾没有空格。不幸的是,这些正则表达式都不起作用。
猜你喜欢
  • 1970-01-01
  • 2017-07-01
  • 2012-12-17
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多