Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RegEx查找特定的URL结构_Regex - Fatal编程技术网

RegEx查找特定的URL结构

RegEx查找特定的URL结构,regex,Regex,我有以下网址 http://mysite/us/product.aspx http://mysite/de/support.aspx http://mysite/spaces/product-space http://mysite/spaces/product-space/forums/this is my topic http://mysite/spaces/product-space/forums/here is another topic http://mysite/spaces/supp

我有以下网址

http://mysite/us/product.aspx
http://mysite/de/support.aspx
http://mysite/spaces/product-space
http://mysite/spaces/product-space/forums/this is my topic
http://mysite/spaces/product-space/forums/here is another topic
http://mysite/spaces/support-zone
http://mysite/spaces/support-zone/forums/yet another topic
http://mysite/spaces/internal
http://mysite/spaces/internal/forums/final topic
http://mysite/support/product/default.aspx
我想使用正则表达式添加爬网规则(这与SharePoint 2010搜索相关),该规则排除不包含
/forums/*
的URL,只保留论坛主题URL

我想要一个规则,排除
。/spaces/space1
。/spaces/space2
的URL,但保留所有其他URL,包括包含
/forums/
的URL

i、 e.以下是我想用正则表达式标识的结果(将在SharePoint搜索的“排除”规则中使用):

保留这些结果与正则表达式不匹配(因此不被该规则排除)

有人能帮我吗?我整个上午都在看这个,我的头开始痛了——我无法解释,我只是没有得到正则表达式结构

谢谢


凯文。。。在
多行
模式下(假设每行有一个URL),这为我带来了窍门:

(.*?\/forums\/.*?)(?:$)
希望这有帮助

更新: 根据您的意见,可以使用以下模式:

.*/spaces/(?!.*/).*
基本上说,匹配行中有
/spaces/
,但之后没有更多的
/
(正如您在评论中所述)


使用@rvalvik的正则表达式建议(另一种方法也是很好的),您的答案如下所示:

^(?!.*/forums/).*/spaces/.*

。。。在
多行
模式下(假设每行有一个URL),这为我带来了窍门:

(.*?\/forums\/.*?)(?:$)
希望这有帮助

更新: 根据您的意见,可以使用以下模式:

.*/spaces/(?!.*/).*
基本上说,匹配行中有
/spaces/
,但之后没有更多的
/
(正如您在评论中所述)


使用@rvalvik的正则表达式建议(另一种方法也是很好的),您的答案如下所示:

^(?!.*/forums/).*/spaces/.*

您可以使用lookahead断言
/forum/
在URL中(如果存在匹配项):

或负向前看以断言它不存在:

^(?!.*/forums/)
更新:

此正则表达式将与“排除”列表中的url匹配:

简而言之,我们使用负前瞻排除所有包含
/forums/
的URL,然后匹配任何包含
/spaces/space1
/spaces/space2
的URL

但是,有些系统要求您匹配整行,在这种情况下,您需要在末尾添加一个
*

^(?!.*/forums/).*/spaces/(?:space1|space2).*

您可以使用lookahead断言
/forum/
在URL中(如果存在匹配项):

或负向前看以断言它不存在:

^(?!.*/forums/)
更新:

此正则表达式将与“排除”列表中的url匹配:

简而言之,我们使用负前瞻排除所有包含
/forums/
的URL,然后匹配任何包含
/spaces/space1
/spaces/space2
的URL

但是,有些系统要求您匹配整行,在这种情况下,您需要在末尾添加一个
*

^(?!.*/forums/).*/spaces/(?:space1|space2).*

谢谢你们的帮助-我意识到我没有给出所有的要求,所以我更新了原来的问题。谢谢你们两位的帮助。根据要求,我已将rvalvik的回答标记为答案。我很难在SharePoint中使用它,但这是另一个stackoverflow站点的另一个问题-它在我的regex测试仪中工作,所以我很高兴:)。。。我更新了我的答案,给了你另一个正则表达式的选择——也许那个会更好。不管怎样,很高兴你能让它工作(并且感谢Regex实践:))谢谢你的帮助-我意识到我没有给出所有的要求,所以我更新了原来的问题。谢谢你的帮助,你们两个。根据要求,我已将rvalvik的回答标记为答案。我很难在SharePoint中使用它,但这是另一个stackoverflow站点的另一个问题-它在我的regex测试仪中工作,所以我很高兴:)。。。我更新了我的答案,给了你另一个正则表达式的选择——也许那个会更好。不管是哪种方式,很高兴你让它工作了(并且感谢Regex实践:))谢谢你的帮助-我意识到我没有给出所有的要求,所以我更新了原来的问题。好的,酷。我将把它插入(将它改编回我的真实世界URL)并看看会发生什么。不幸的是,John调用了它。我的真实世界URL不像我最初的示例那样是静态的,因此指定
:space1 | space2
是行不通的,也不容易调整。一、 再次,用更好的例子更新了原始问题。@qmcvin,请参阅我更新的解决方案,但是,正如我所说,请将答案授予rvalvik-他提出了正确的模式。如果您想排除所有不包含
/forums/
但包含
/spaces/
的URL,那么John Bustos修改的模式将非常有效。我的印象是,你只想排除某些“空间”,只要它们没有
/forums/
,在这种情况下,你会将它们添加到“列表”中。因此,以您的真实示例为例:
^(?。*/forums/).*/spaces/(?:支持区|内部|产品空间)。*
感谢您的帮助-我意识到我没有给出所有要求,所以我更新了原始问题。好的,很酷。我将把它插入(将它改编回我的真实世界URL)并看看会发生什么。不幸的是,John调用了它。我的真实世界URL不像我最初的示例那样是静态的,因此指定
:space1 | space2
是行不通的,也不容易调整。一、 再次,用更好的例子更新了原始问题。@qmcvin,请参阅我更新的解决方案,但是,正如我所说,请将答案授予rvalvik-他提出了正确的模式。如果您想排除所有不包含
/forums/
但包含
/spaces/
的URL,那么John Bustos修改的模式将非常有效。我的印象是,你只想排除某些“空间”,只要它们没有
/forums/
,在这种情况下,你会添加