2015-11-25 26 views
-2

我有搜索词提到以下网址:如何正则表达式搜索词在URL

搜索条件:新的汽车

网址:

https://www.google.co.in/search?q=new+cars&oq=new+car&aqs=chrome.1.69i57j0l5.340860j0j8&sourceid=chrome&es_sm=122&ie=UTF-8 

检索词:丛林书&字符

URL:

https://in.search.yahoo.com/search;_ylt=A2oKmKEkpE1WqioAkV67HAx.;_ylc=X1MDMjExNDcyMzAwMwRfcgMyBGZyA3lmcC10LTEwMQRncHJpZANWSDhxR0pDUlJZcXNUTG1oM0JkMFBBBG5fcnNsdAMwBG5fc3VnZwM4BG9yaWdpbgNpbi5zZWFyY2gueWFob28uY29tBHBvcwMwBHBxc3RyAwRwcXN0cmwDBHFzdHJsAzI0BHF1ZXJ5A2p1bmdsZSBib29rICYgY2hhcmFjdGVycwR0X3N0bXADMTQ0NzkyODk3Nw--?p=jungle+book+%26+characters&fr2=sb-top-in.search&fr=yfp-t-101&vm=r 

有没有一种方法来正则表达式,只匹配搜索词(不包括特殊字符)以通用的方式,以便它可以处理所有类型的搜索URL?

+0

你在用什么语言?我会从一个聪明的正则表达式开始提取查询字符串的相关部分。然后我会根据你想匹配的条款来分割和检查每件作品。 –

+0

这是Java脚本。 –

+0

我不确定这里是否有银色的子弹,因为您列出的每个网站的查询参数都有不同的名称。 –

回答

0

我发现它终于..在这里我们需要考虑各种图案中发现的搜寻网址: 使用非捕获组:

(?:(?:[?|&][p|q]=))([^&]*) 

https://regex101.com/r/gG6jR7/2

不使用非捕获组:

[?|&][p|q]=([^&]*) 

https://regex101.com/r/gG6jR7/3

+0

为什么使用这个而不是其他人发布的更有效的正则表达式呢? 'p =([^&] *),因为@Jan也发布了作品。 '[pq] =([^&] *)'适用于Google和Yahoo。 – WillS

+0

它是因为p被雅虎使用,q被谷歌使用。 我的正则表达式处理两者。 –

2
  • 谷歌:q=([^&]*)(后q=比赛一切都交给下一 符号或到年底)比赛:​​

  • 雅虎:p=([^&]*)(与p=同样的想法)
    比赛:jungle+book+%26+characters

  • Both:[pq]=([^&]+)(combined,p或q)

虽然这可能会起作用,但您最好在PHP中使用parse_url()或者(因为您的问题带有JavaScript标记)请参阅phpjs.org,它与JS中的PHP函数等效。

看到这个工作regex fiddle for yahoo