2011-05-25 7 views
5

मुझे पता है कि प्रश्न शीर्षक बहुत दोहराव दिखता है। लेकिन कुछ समाधान मुझे यहां नहीं मिला। इस पैटर्न मैं http:// और https:// जो भला है साथ यूआरएल को खोजने के लिए कर रहा था का उपयोग करphp और regex के माध्यम से पाठ स्ट्रिंग से यूआरएल ढूँढना?

$pattern = '`.*?((http|https)://[\w#$&+,\/:;[email protected]]+)[^\w#$&+,\/:;[email protected]]*?`i'; 

    if (preg_match_all($pattern,$url_string,$matches)) { 
     print_r($matches[1]); 
    } 

:

मैं यूआरएल प्रपत्र पाठ स्ट्रिंग खोजने की जरूरत है। लेकिन मैं उपयोगकर्ता इनपुट है, जहां लोगों को www.domain.com तरह यूआरएल जोड़ने के भी domain.com

तो, मैं स्ट्रिंग मान्य करने के लिए पहले जहां मैं उन्हें पहले आम प्रोटोकॉल http:// साथ www.domain.comdomain.com जगह ले सकता है की जरूरत है। या मुझे और अधिक अच्छे पैटर्न के साथ आने की जरूरत है?

मैं रेगेक्स के साथ अच्छा नहीं हूं और नहीं जानता कि क्या करना है।

मेरा विचार पहले http:// और https:// साथ यूआरएल की खोज कर रहा है उन्हें एक सरणी में डाल तो तब पाठ स्ट्रिंग में ("") अंतरिक्ष के साथ इन यूआरएल की जगह इसके लिए अन्य पैटर्न का उपयोग करें। लेकिन मुझे यकीन नहीं है कि किस पैटर्न का उपयोग करना है।

मैं इस $url_string = preg_replace($pattern, ' ', $url_string); उपयोग कर रहा हूँ, लेकिन यह निकालता है, यदि कोई हो www.domain.com या domain.com यूआरएल दो मान्य url साथ http:// के बीच या https://

आप मदद कर सकते हैं कि बहुत अच्छा होगा।

चीजों को और अधिक स्पष्ट करने के लिए:

मैं एक पैटर्न या किसी अन्य विधि मैं कहाँ एक पाठ डंक के सभी URL पा सकते हैं की जरूरत है। यूआरएल के उदाहरण हैं:

  1. domain.com
  2. www.domain.com
  3. http://www.domain.com
  4. http://domain.com
  5. https://www.domain.com
  6. https://domain.com

धन्यवाद! 5.

+0

क्या आप यूआरएल फ़ील्ड के साथ किसी फॉर्म से उपयोगकर्ता इनपुट को मान्य नहीं कर रहे हैं? या क्या आप इसके अंदर पाए गए यूआरएल की सूची उत्पन्न करने के लिए टेक्स्ट का एक पेज/ब्लॉक स्क्रैप कर रहे हैं? "पाठ स्ट्रिंग" का एक पूरा उदाहरण जिसे आप पार्स करने का प्रयास कर रहे हैं, सहायक हो सकता है। – baraboom

+0

@baraboom: हाँ, उपयोगकर्ता इनपुट टेक्स्टबॉक्स से। जहां लोग इस ट्विटर की तरह इनपुट कर सकते हैं: twitter.com/user facebook: http://facebook.com आदि .. – Sisir

उत्तर

3
$pattern = '#(www\.|https?://)?[a-z0-9]+\.[a-z0-9]{2,4}\S*#i'; 
preg_match_all($pattern, $str, $matches, PREG_PATTERN_ORDER); 
+0

धन्यवाद! लगभग काम किया !! अभी भी पैटर्न 'डोमेन खोजने की जरूरत है।com' – Sisir

+1

@Sisir http: // या www वैकल्पिक बनाने के लिए '{1}' '' '' के साथ बदलता है। –

+0

यह मेरे लिए काम नहीं करता है। मुझे एक खाली परिणाम मिलते हैं। '$ पैटर्न = '# (www \। | Https?: \/\ /) {?} [A-zA-Z0-9] {2,254} \। [A-zA-Z0-9] {2,4 } (\ S *) # मैं '; $ count = preg_match_all ($ पैटर्न, 'http://www.Imaurl.com', $ मैचों, PREG_PATTERN_ORDER); ' और 'preg_last_error()' – Shane

0

मुझे यकीन है कि अगर मैं समझ लिया है क्या आप सही तरीके से की जरूरत है नहीं कर रहा हूँ, लेकिन आप कुछ इस तरह का उपयोग कर सकते हैं:

preg_match('#^.+?://#', $url); 

अगर वहाँ एक प्रोटोकॉल स्ट्रिंग पर निर्दिष्ट है खोजने के लिए, और अगर http://

संबंधित मुद्दे