是否有可能在正则表达式中说#34;如果下一个单词与此表达式不匹配"?

时间:2014-12-15 06:47:01

标签: regex

我试图检测围绕它的*asterisks*斜体字的出现次数。但是我想确保它不在链接中。所以应该找到" text"在here is some *text*但不在http://google.com/hereissome*text*intheurl内。

我的第一直觉是使用预测,但如果我使用像John Gruber这样的URL正则表达式,它似乎无法工作:

(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

让它在模式的开头向前看,然后是模式的其余部分。

(?=URLPATTERN)\*[a-zA-Z\s]\*

那我该怎么做呢?

2 个答案:

答案 0 :(得分:1)

您可以使用此替换技术首先匹配要丢弃的LHS上的所有内容。然后在RHS上使用捕获的组来匹配所需的文本。

https?:\/\/\S*|(\*\S+\*)

然后,您可以使用捕获的组#1作为强调文本。

RegEx Demo

答案 1 :(得分:0)

以下正则表达式:

^(?!http://google.com/hereissome.*text.*intheurl).*

匹配http://google.com/hereissome*text*intheurl以外的所有内容。这称为负向前瞻。一些正则表达式库可能不支持它,python的支持它。

以下是指向Mastering Lookahead and Lookbehind的链接。