【问题标题】:Invert match with RegExp使用 RegExp 反转匹配
【发布时间】:2010-08-25 19:33:24
【问题描述】:

我目前正在 Yahoo! 上开发管道。管道。我有一个正则表达式来匹配一个 URL。现在,我需要匹配不匹配的才能删除它,这样就只有我的 URL。我的正则表达式是:

[A-Za-z]+:\/\/[A-Za-z0-9-_]+\.[A-Za-z0-9-_:%&\?\/.=]+

如何反转匹配? (它必须通过另一个 RegExp 来完成,YPipes 不支持任何其他方式。)

编辑:澄清一下:我有一个字符串,需要获取其中的第一个 URL。这就是为什么其他方法都不起作用的原因……

【问题讨论】:

  • “不”的东西不起作用吗? IE。像这样:[^(your-regexp-here)]
  • 不,您可以通过这种方式反转字符类,但不能反转整个正则表达式。
  • 好的,谢谢,完全是我的错。对不起。

标签: regex url yahoo-pipes


【解决方案1】:

Yahoo Pipes 支持正则表达式替换(使用字符串正则表达式模块)。

然后匹配你想要保留的部分,并在一个组中捕获它。你已经这样做了,虽然你的正则表达式本身有点错误,但这里至少纠正了明显的错误:

([A-Za-z]+://[A-Za-z0-9_-]+\.[A-Za-z0-9_:%&?/.=-]+) ^ ^ ^ | | | | | + 单独的破折号总是在角色类的末尾! | +--- 正斜杠不需要转义 +--- 捕获组 1,稍后通过 $1 访问内容

然后用该组的内容替换整个字符串。只需将$1 放入“替换为”字段即可。实际上,这会删除您不想保留的所有内容。

由于我不确定您的正则表达式实际上应该做什么,所以我不能给您更好的版本。

作为一般提示:正则表达式始终且仅涉及 匹配 的内容,而永远不会涉及 不匹配(即“排除”)的内容。有些正则表达式具有排除效果,但即使它们是通过匹配来实现的。

【讨论】:

  • 请阅读编辑。我认为,另一种可能性是稍后捕获其他内容以再次支持 1 美元。你有什么想法吗?
  • @FB55:在正则表达式之前使用[\s\S]*?,在正则表达式之后使用[\s\S]*[\s\S]*?([A-Za-z]+://[A-Za-z0-9_-]+\.[A-Za-z0-9_:%&?/.=-]+)[\s\S]*
猜你喜欢
  • 2017-02-11
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 2011-08-03
  • 2016-04-19
  • 1970-01-01
  • 2020-12-24
  • 2019-09-23
相关资源
最近更新 更多