ما Regex من شأنه أن يتطابق مع جدول متداخل مع نص محدد في خلية الجدول؟

StackOverflow https://stackoverflow.com/questions/1505277

  •  19-09-2019
  •  | 
  •  

سؤال

ما Regex من شأنه أن يتطابق مع جدول متداخل مع نص محدد في خلية الجدول؟ لقد حاولت ولكن فشلت في التوصل إلى تعبير منتظم لاستخراج الجدول المحدد الذي أريده عند الاستيلاء على بداية ونهاية كل من الجدولين في المثال. إليك شيء للبدء فيه: "<table>.*?</table>"

<table>
    <tr>
        <td>
            <table>
                <tr><td>Code1</td></tr>
                <tr><td>some data</td></tr>
                <tr><td>etc ...</td></tr>
            </table>
        </td>
    </tr>
    <tr>
        <td>
            <table>
                <tr><td>Code2</td></tr>
                <tr><td>some data</td></tr>
                <tr><td>etc ...</td></tr>
            </table>
        </td>
    </tr>
</table>

قل أريد استخراج الجدول الذي يحتوي على "رمز 2". ما regex سوف تتطابق على وجه التحديد وفقط هذا الجدول؟

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

المحلول

ستجد Regex التالي طاولتك:

(?ms)<table>((?!<table>).)*<td>Code2</td>.*?</table>

مع (?ms) تقوم بتشغيل "مباريات Multiline" (m) و "نقطة يطابق خطوط نيو هناك" (s). وبعد ثم لديك نظرة سلبية (?!) للتأكد من عدم وجود بداية ثانية من جدول داخل مباراتك.

نصائح أخرى

لن أستخدم Regexp في هذا الأمر، نظرا لأن HTML ليس منتظما، ولا توجد حالات نهاية الحافة لتعبئة لك. أنت أفضل حالا باستخدام محلل HTML. أيهما اللغة أو النظام الأساسي الذي تستخدمه، سيكون هناك واحد متاح.

لا تستخدم Regex. استخدام محلل HTML!

ومع ذلك، في بيرل (على افتراض أنك لا يكون لديك طاولات متداخلة):

$xml =~ /<table>.*<td>Code2<\/td>.*<\/table>/s;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top