سؤال

ولدي مجموعة من السلاسل، كل منها يحتوي على علامة مرساة ورابط.

وسلسلة السابق.

here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!

وأريد أن تحليل الخروج تثبيت العلامات وبين في كل شيء.

ونتيجة السابق.

here is a link. enjoy!

وعناوين المواقع في أ href = جزء لا تتطابق دائما نص الارتباط ولكن (عناوين أحيانا هناك تقصير، والنص في بعض الأحيان مجرد وصفي).

وأواجه وقت صعب للغاية معرفة كيفية القيام بذلك مع أي تعبيرات عادية أو وظائف بي. كيف يمكنني تحليل بأكمله مرساة العلامة / ارتباط من سلسلة؟

وذلك بفضل!

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

المحلول

ويجب عدم استخدام REGEX ل تحليل أتش تي أم أل و استخدام محلل أتش تي أم أل بدلا من ذلك.

ولكن إذا كان يجب استخدام التعابير المنطقية، وتثبيت العلامات الخاصة بك محتويات الداخلية ويضمن أن تكون خالية من أتش تي أم أل مثل </a>، ويضمن كل سلسلة لاحتواء واحد فقط العلامة مرساة كما في المثال حالة، ثم - بعد ذلك فقط - يمكنك استخدام شيء مثل:

واستبدال /^(.+)<a.+<\/a>(.+)$/ مع $1$2

نصائح أخرى

وعند النظر إلى مثال نتيجة الخاص بك، فإنه يبدو وكأنك مجرد إزالة العلامات / المحتوى - هل تريد أن تبقي ما جردت من أم لا؟ إن لم يكن قد تكون تبحث عن strip_tags() .

ومنذ مشكلتك يبدو أن تكون محددة جدا، وأعتقد أن هذا ينبغي أن نفعل ذلك:

$str = preg_replace('#\s?<a.*/a>#', '', $str);

ومجرد استخدام العادية وظائف PHP سلسلة الخاص بك.

$str='here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!';
$s = explode("</a>",$str);
foreach($s as $a=>$b){
    if( strpos( $b ,"href")!==FALSE ){
        $m=strpos("$b","<a");
        echo substr($b,0,$m);
    }
}   
print end($s);

والانتاج

$ php test.php
here is a link . enjoy!
$string = 'here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!';
$text = strip_tags($string);
echo $text; //Outputs "here is a link . enjoy!"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top