Belirli Sorgu Algılama Düzenli İfade

4 Cevap php

Ya da "site: www.globe.com.ph/:" Eğer herkes bir kişi "cnn.com site" gibi bir şey arar algılamak bir düzenli ifadeyi inşa merak ediyorum. Ben en zor zaman o sergiyi sahip oldum. Teşekkür peşin a lot!

Düzenleme: Maalesef benim komut dosyası PHP olduğunu söylemeyi unutmuşum.

4 Cevap

Tamam, keyfi bir metin alanına girişi için, aşağıdaki gibi basit bir şey çalışacaktır:

\bsite:(\S+)

burada parantez onlar aramak için çalışıyoruz ne site / domain yakalayacaktır. Bu kadar geçerli onu doğrulamak, ancak URL'ler / etki doğrulama karmaşık ve bunu yaparken birçok kolayca googlable regexes var olmaz, örneğin, orada biri here.

Neye karşı eşleşen? Bir referer url?

Eğer bu gibi bir referer url karşı eşleşen varsayarak:

http://www.google.com/search?client=safari&rls=en-us&q=whatever+site:foo.com&ie=UTF-8&oe=UTF-8

Böyle bir regex hile yapmak gerekir:

\bsite(?:\:|%3[aA])(?:(?!(?:%20|\+|&|$)).)+

Notlar:

  • 'Site' sonra kolon şifresiz olabilir ya da o yüzde kodlanmış olabilir. Çoğu kullanıcı arayüzlerinin (Ben standart aslında aykırı olduğuna inanıyorum) Unencoded bırakacak, ama bu hem idare edecek
  • Url ... Bir boşluk karakteri, alanın sonu (&) veya dizenin sonunda ($) değerleriyle sağ sınırlanmış olacaktır: Ben siteyi üstlendi
  • Ben x-www-form-urlencoded kodlama (alanlarda == '+') veya yüzde kodlama (boşluk ==% 20) ile kodlanmış alanlarda kabul etmedi. Bu, hem idare edecek
  • (:? ...) Olmayan bir yakalama grubudur. (?! ...) Bir negatif ileri yönlü olduğunu.

hayır bu bir yönlendirme url için değil. Benim php komut dosyası temelde bir etki alanı (örneğin, geri, pagerank vb) hakkında bilgi tükürür ve kullanıcı aradığı bilecek yüzden ben bu regex gerekir. Kullanıcı regex uyuşmuyorsa bir şey girerse, bunun yerine normal bir web araması yapar.

Bu yapmanız çalıştığınız tüm ise, ben daha basit bir yaklaşım ve sadece bunu istiyorum sanırım:

$entry = $_REQUEST['q'];
$tokens = split(':', trim($entry));
if (1 < count($tokens) && strtolower($tokens[0]) == 'site')
  $site = $tokens[1];