עזרה בREGEX
-
יש לי HTML שיש בו לינקים. יש שני סוגי לינקים. לינק שמציג טקסט (ובלחיצה על הטקסט פותח הלינק), ולינק שמציע הלינק עצמו.
אני רוצה למחוק מהטקסט כל הלינקים מהסוג השני.
עשיתי REGEX#<a .*>http.*</a>#isU
וזה HTML לדוגמא
<body> <a href="https://www.test.co.il"> text1 </a></td> </tr> </table> </td> </tr> <tr> <td style=""> <a href="https://www.test.co.il/" style="">https://www.test.co.il/a.php</a></td> </body>
אבל זה תופס מתחילת התגית a הראשונה עד סוף התגית האחרונה.
איפה טעיתי? ניסיתי עם פרמטרים שונים, בלי U, לא עזר כלום
תודה רבהאני מבין שלפי הכלל היבש, זה מתחיל לעבור על הטקסט, פוגש התגית a הראשונה, ממשיך עד שמוצא http, שזה רק בa השני.
אבל אני רוצה שזה יתפוס רק את האחרון. יש דרך לעשות את זה? -
@dovid אמר בRegex - ביטויים רגולריים:
הערה, יש מושג כימות עצלן: כל מצייני הכמות מנסים תמיד למצוא את המקסימום. למשל אם נחפש אלמנט HTML שזה בעצם טקסט מוקף זויות, אנו עשויים לחפש "<.+>" - משמעות: סוגריים זויתיות שביניהם 1 או יותר של תו כל שהוא. כעת אם יש כמה זוגות של כאלה בטקסט במקום למצוא כל אחד לעצמו הוא יתפוס מהראשון עד האחרון ברציפות! הנה דוגמה. זה התנהגות הברירת מחדל שנקראת חמדנית. ההיפך של זה נקרא התנהגות עצלנית והיא מושגת ע"י הוספת סימן שאלה אחרי מציין הכמות - הכוכבית או הפלוס, הנה דוגמא עובדת. המשמעות היא להעדיף את ההתאמה המינימלית.
כלומר ככה יעבוד:
<a .*?>.*?<\/a>
יש לציין שבPHP יש דגל של U לרג'קס, שמשמעותו Ungreedy - לא חמדן, אלא עצלן.
ואז אפשר להשתמש עם כוכבית לבד.אגב לטעמי הפתרון של @yossiz מצויין.
-
<a(.+?href="http).+?>.+?<\/a>
-
מעניין למה האתר הוריד לי את הסלש?
<a(.+?href="http).+?>.+?</a> -
@שואף אמר בעזרה בREGEX:
@yossiz אמר בעזרה בREGEX:
[^>]
אתה גאון!! לא חשבתי על זה.
אבל זה לא פיתרון נקי.. זה בעל'בתיש, אין צורה לכתוב את זה שלא יעשה את הבעייה?זה גם מה שאני עשיתי בעבר, וזה הדבר היחיד שעזר לי בזמנו (אז הייתי צריך לחפש את ה-,'href' של הלינקים)