RegEx适应新线

时间:2011-08-17 07:55:49

标签: regex

我有以下RegExp来查找上面列出的URI:

"^w{3}\.[\S\-\n|\S]+[^\s.!?,():]+$"

要查找的网址:

  1. www.example.org
  2. www.example-example.org
  3. www.example-example.org/product
  4. 您可以在www.example-找到它 example.org/product。
  5. www.example.org
    你会在那里找到它。
  6. 将会找到数字1,2和3,但是4.将“www.example-”作为URI提供。 当4月底没有任何意义时,它会正确地传达它。

    编辑:删除^$后,只有5号无效。

    有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

你的模式

^w{3}\.[\S\-\n|\S]+[^\s.!?,():]+$

可以简化为

^w{3}\.[\S\n]+[^\s.!?,():]$

[\S\-\n|\S]这是一个字符类,没有OR可能,不需要重复,-包含在\ S中。所以[\S\n]正在做同样的事情。

[^\s.!?,():]+因为您将每个非空白与此前的表达式匹配,此处不需要+。我假设你只是希望你的模式不要以课堂上的一个角色结束。

查看您的模式on Regexr(我在您的第一堂课中添加了\r,因为那里的换行需要它)

这是一个非常有用的测试正则表达式的工具

我认为您的问题是您希望允许链接中的换行符。你想怎么处理这个?如果下一行中的单词只是一个单词或链接的一部分,那么如何区分行何时以链接结尾? 我认为这是不可能的!

答案 1 :(得分:0)

问题是第二个方括号部分中的'^ \ s'。根据您的编程语言,'\ s'可能与新行匹配。所以,你告诉它匹配任何不是空格的东西,它会找到一个空格(新行)。

但是,这应该只是您的问题之一。你的正则表达式使用'^'和'$'字符分别表示行的开头和结尾。试试这个URL示例:

  

你好,来自www.example.org

它匹配了吗?我认为不会。