سؤال

مرحبا أريد أن استخراج الروابط <a href="/portal/clients/show/entityId/2121" > وأريد regex والتي المشروع me /portal/العملاء/إظهار/entityId/2121 عدد في الماضي 2121 في روابط أخرى مختلفة أي فكرة ؟

هل كانت مفيدة؟

المحلول

التعابير المنطقية لتحليل الروابط هو شيء من هذا القبيل:

'/<a\s+(?:[^"'>]+|"[^"]*"|'[^']*')*href=("[^"]+"|'[^']+'|[^<>\s]+)/i'

بالنظر إلى مدى فظاعة ذلك ، أود أن أوصي باستخدام HTML بسيطة دوم للحصول على روابط على الأقل.يمكنك التحقق من الارتباطات باستخدام بعض أساسية جدا regex على الرابط href.

نصائح أخرى

بسيطة php html dom المحلل مثال:

// Create DOM from string
$html = str_get_html($links);

//or
$html = file_get_html('www.example.com');

foreach($html->find('a') as $link) {
    echo $link->href . '<br />';
}

لا تستخدم التعبيرات العادية ل Proccessing XML / HTML. وبعد يمكن القيام بذلك بسهولة باستخدام المدمجة محلل دوم:

$doc = new DOMDocument();
$doc->loadHTML($htmlAsString);
$xpath = new DOMXPath($doc);
$nodeList = $xpath->query('//a/@href');
for ($i = 0; $i < $nodeList->length; $i++) {
    # Xpath query for attributes gives a NodeList containing DOMAttr objects.
    # http://php.net/manual/en/class.domattr.php
    echo $nodeList->item($i)->value . "<br/>\n";
}

عندما "تحليل" HTML أعتمد في الغالب على phpquery: http://code.google.com/p/phpquery/ بدلا ثم regex.

هذا هو الحل الخاص بي:

<?php
// get links
$website = file_get_contents("http://www.example.com"); // download contents of www.example.com
preg_match_all("<a href=\x22(.+?)\x22>", $website, $matches); // save all links \x22 = "

// delete redundant parts
$matches = str_replace("a href=", "", $matches); // remove a href=
$matches = str_replace("\"", "", $matches); // remove "

// output all matches
print_r($matches[1]);
?>

أوصي بتجنب استخدام المحللين المستندة إلى XML، لأنك لن تعرف دائما، ما إذا كان المستند / موقع الويب قد تم تشكيله جيدا.

مع أطيب التحيات

يمكن إجراء التقشير الروابط من HTML باستخدام محلل HTML.

عندما يكون لديك جميع الروابط، احصل بسيطة على مؤشر الخط الأخير الأمامي، ولديك رقمك. لا حاجة regex.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top