Замена атрибутов HTML с помощью регулярных выражений в PHP - PullRequest
5 голосов
/ 22 апреля 2009

ОК, я знаю, что должен использовать DOM-парсер, но это для того, чтобы заглушить некоторый код, который является доказательством концепции для более поздней функции, поэтому я хочу быстро получить некоторые функциональные возможности на ограниченном наборе тестового кода.

Я пытаюсь удалить атрибуты ширины и высоты фрагментов 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;
}

Но это не работает.

Как мне заставить это работать?

Ответы [ 3 ]

7 голосов
/ 22 апреля 2009

PHP уникален среди основных языков тем, что хотя регулярные выражения указываются в виде строковых литералов, таких как Python, Java и C #, вам также необходимо использовать разделители регулярных выражений, такие как Perl, JavaScript и Ruby.

Имейте в виду, что вы можете использовать одинарные кавычки вместо двойных кавычек, чтобы уменьшить необходимость экранирования таких символов, как двойные кавычки и обратные слэши. Это хорошая привычка, потому что правила экранирования для строк в двойных кавычках могут удивлять.

Наконец, вы можете объединить две замены в одну с помощью простого чередования:

$pattern = '/(width|height)="[0-9]*"/i';
4 голосов
/ 22 апреля 2009

Для вашего паттерна необходим символ начала / конца паттерна. Как это:

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

"/" - обычный символ, но большинство символов будет работать ("| pattern |", "# pattern #", как угодно).

0 голосов
/ 22 апреля 2009

Я думаю, что вы пропускаете скобки (которые могут быть //, || или другими различными парами символов), которые должны заключать регулярное выражение в строку. Попробуйте изменить назначения $ pattern для этой формы:

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

... если вы хотите сделать сравнение без учета регистра, добавьте 'i' в конце строки, таким образом:

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

Надеюсь, это поможет! David

...