سؤال

حسنا، أعرف أنه يجب علي استخدام محلل دوم، ولكن هذا هو كعب بعض التعليمات البرمجية وهو دليل على مفهوم للحصول على ميزة لاحقة، لذلك أريد أن أحصل بسرعة على بعض الوظائف على مجموعة محدودة من رمز الاختبار.

أحاول تجريد سمات العرض والارتفاع من Chunks HTML، وبعبارة أخرى، استبدال

width="number" height="number"

مع سلسلة فارغة.

وظيفة أحاول الكتابة تبدو وكأنها في الوقت الحالي:

function remove_img_dimensions($string,$iphone) {
    $pattern = "width=\"[0-9]*\"";
    $string = preg_replace($pattern, "", $string);

    $pattern = "height=\"[0-9]*\"";
    $string = preg_replace($pattern, "", $string);

    return $string;
}

ولكن هذا لا يعمل.

كيف أجعل هذا العمل؟

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

المحلول

PHP هو فريد من نوعه بين اللغات الرئيسية في ذلك، على الرغم من أن Regyxes محددة في شكل حرفي سلسلة مثل في Python و Java و C #، لديك أيضا استخدام محددات Regex مثل في بيرل وجافا سكريبت وروبي.

كن على دراية، أيضا، يمكنك استخدام علامات اقتباس واحدة بدلا من علامات الاقتباس المزدوجة لتقليل الحاجة إلى الهروب من الأحرف مثل اقتباسات مزدوجة وخلفية الظهر. إنها عادة جيدة للدخول، لأن القواعد الهروبية للأسلوتات المزدوجة المذكورة يمكن أن تكون مفاجئة.

أخيرا، يمكنك الجمع بين استبدالك في واحدة عن طريق التناوب البسيط:

$pattern = '/(width|height)="[0-9]*"/i';

نصائح أخرى

يحتاج نمطك إلى حرف نمط البداية / النهاية. مثله:

$pattern = "/height=\"[0-9]*\"/";
$string = preg_replace($pattern, "", $string);

"/" هي الشخصية المعتادة، ولكن معظم الشخصيات ستعمل ("| نمط |"، "# نمط #"، أيا كان).

أعتقد أنك تفتقد الأقواس (والتي يمكن أن تكون //، أو | أو أزواج أخرى من الأحرف الأخرى) التي تحتاج إلى تحيط تعبير منتظم في السلسلة. حاول تغيير مهام نمط $ الخاص بك إلى هذا النموذج:

$pattern = "/width=\"[0-9]*\"/";

... إذا كنت تريد أن تكون قادرا على القيام بمقارنة غير حساسة للحالة، أضف "أنا" في نهاية السلسلة، وبالتالي:

$pattern = "/width=\"[0-9]*\"/i";

أتمنى أن يساعدك هذا! ديفيد

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