当前位置: 首页 > 知识库问答 >
问题:

正则表达式,忽略前面有字符的结果

袁志专
2023-03-14

我有一个用于匹配 URL 的正则表达式((https?:\/\/)?[\w-](\.[\w-] )\.?(:\d )?(\/\S*)?它完成了工作,它为我想要的而工作。但是,当我不希望它时,它也会匹配电子邮件的域。

当前匹配项:

    < li>http://www.foo.bar < li>foo.bar < li >网址:foo.bar(与foo.bar部分匹配) < li>info@foo.bar(匹配foo.bar部分)

我不希望它匹配最后一个,所以它只匹配前三个。我尝试添加(?!=@)到前面,但这没有做到。如何让它忽略前面带有 @ 符号的结果?

共有3个答案

澹台阳秋
2023-03-14
^((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/[\S]*)?)$

只需添加锚点即可移除部分匹配。启用< code>m或< code > multililine 标志。参见演示。

http://regex101.com/r/sU3fA2/43

江超英
2023-03-14

只有当字符串只包含要匹配的URL时,锚点才起作用。事实可能并非如此。

相反,您真正想要的是匹配 URL 之前有空格(或没有空格)的位置。尝试:

(?:^|(?<=\s))YOUR REGEX HERE

这将检查您已经拥有的正则表达式之前是否没有任何内容或空格字符。

regex101演示

考虑进一步添加(?=\s|$)到正则表达式的末尾,以确保它不匹配半个单词。

张光辉
2023-03-14

向您的正则表达式添加锚点

^((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)$

请参阅示例 http://regex101.com/r/lI8kZ6/1

解释

^在行的开头断言正则表达式

$在行末尾声明正则表达式

编辑

如果URL嵌入文本中,请使用\s将正则表达式匹配字符串指定为

(\s|^)((https?:\/\/)?[\w-]+(\.[\w-]+)+\.?(:\d+)?(\/\S*)?)\s

参见示例

http://regex101.com/r/lI8kZ6/3

 类似资料:
  • 我有以下示例文本 当我应用以下正则表达式时,当我打印第一个捕获组时,我期望以下输出 但是我最终得到的是 在我看来,由于某种原因,否定的先行部分被忽略了,因此正则表达式与整个字符串匹配。 真正让我困惑的是,积极的前瞻性正如我所期望的那样工作。例如,使用在打印第一个捕获组时返回以下内容 这是有道理的,所以我真的很困惑为什么消极的前瞻性没有正常运作。

  • 我正在尝试在文本中查找html标签,如下所示: 但是颜色部分可以改变(比如#bbbbbb)…我想我可以为此使用正则表达式,对吗?但是我不确定我怎么能忽略它的颜色部分… 你能帮我吗?这可能吗? 非常感谢你

  • 我有一个正则表达式,最多允许6个小数(“.”是小数分隔符) 我还想设置最大长度条件,以便用户只能输入12位数字,最大长度应排除“.”我如何使用正则表达式做到这一点。

  • 我有一个将大写/小写字符串转换为大写字符串的正则表达式。问题是,在我的国家,名字中有特殊字符是很正常的,这让我的反应很不舒服 如果我对“JOAO CARLOS NOBREGA”使用此方法,则返回“JOAO CARLOS NOBREGA”。但如果我将此方法用于“JOÃO CARLOS NOBREGA”,则返回“JOÃO CARLOS NOBREGA”。我如何解决这个问题?

  • 我定义的正则表达式对所有测试字符串都很好,除了当捕获组顺序被交换时(2016 Fall或16F或18SU),正则表达式中是否有一种方法可以忽略正则表达式的捕获组顺序

  • 我有一个包含数千行的文本文件。这里有一个例子 我试图提取'nt60'、'nt50'末尾的字符串。 问题是会包含行尾字符() 我想使用正则表达式搜索来匹配从 (') 开始的字符串,但我不知道我应该用什么来匹配 。 有人能帮忙吗?