Регулярное выражение: Значение HTML-атрибутов Изменений к некоторому шаблону

Я имею тысячи тегов HTML, имею, записал как это:
<input type="text" name="CustomerName" />
<input type="text" name="SalesOrder"/>

Я должен соответствовать каждому name значения атрибута и преобразовывают их всех, чтобы быть похожими на это:
CustomerName -> cust[customer_name]
SalesOrder -> cust[sales_order]

Таким образом, результаты будут:
<input type="text" name="cust[customer_name]" />
<input type="text" name="cust[sales_order]" />

Моя лучшая попытка всунула этот шаблон: name=\"[a-zA-Z0-9]*\"
-> просто найденный name="CustomerName"

Заранее спасибо.

1
задан Brain90 2 May 2014 в 06:23
поделиться

2 ответа

Что-то вроде этого?

<?php
$subject = <<<EOT
<input type="text" name="CustomerName" />
<input type="text" name="SalesOrder"/>
EOT;
$pattern = '/\\bname=["\']([A-Za-z0-9]+)["\']/';
$output = preg_replace_callback($pattern, function ($match) {
    return ''
    . 'name="cust['
    . strtolower(preg_replace('/(?<=[a-z])([A-Z])/', '_$1', $match[1]))
    . ']"';
}, $subject);
?>
<pre><?php echo htmlentities($output);?></pre>

Результат выглядит так:

<input type="text" name="cust[customer_name]" />
<input type="text" name="cust[sales_order]"/>
0
ответ дан 3 September 2019 в 00:31
поделиться

Анализ HTML - не лучший вариант использования RegEx. См. здесь .

С учетом сказанного, это может быть достаточно малая задача, и она не сведет вас с ума. Вам понадобится что-то вроде:

Найдите: name = "(. +)"

Замените: name = "cust [$ 1]"

, а затем надейтесь, что ваш HTML-код не t очень нерегулярный (в большинстве случаев, но всегда можно надеяться).

Обновление: вот несколько sed -fu , которые помогут вам начать работу с camelCase -> подчеркивания.

2
ответ дан 3 September 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: