Захватить только часть строки без форматирования - PullRequest
0 голосов
/ 01 ноября 2011

Я пытаюсь захватить только цифры между тегами <em> & </em>, без тегов <b> & </b>, используя основное регулярное выражение. Я пытался придумать способы, может быть, искать обходные пути, но я просто не настолько опытен ... пока. Вот пример необработанного HTML:

<em>4<b>4</b>9/<b>5</b>-<b>7</b>0</em>

Вот что я хотел бы получить:

449570

Проблема в том, что иногда эти строки имеют форматирование HTML, а иногда нет. Иногда есть дополнительные символы - и /, иногда нет. Я использую <em>.*<\/em>, который настолько прост, насколько это возможно!

Спасибо за вашу помощь:)

Ответы [ 4 ]

1 голос
/ 01 ноября 2011

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

echo "<em>4<b>4</b>9/<b>5</b>-<b>7</b>0</em>" | sed 's|<[^>]\+>||g' | sed 's|[^0-9]||g'

Первая операция sed удаляет все теги html.Вторая удаляет все нечисловые символы.

0 голосов
/ 01 ноября 2011

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

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

Тем не менее, я бы сделал это как два регулярных выражения - захватите строку, а затем вытесните любые теги, которые вы не хотите из захваченной строки (не забудьте сопоставить их, используяне жадные спички!)

0 голосов
/ 01 ноября 2011

например. если вы в JavaScript, попробуйте это:

var str = "<em>4<b>4</b>9<b>5</b><b>7</b>0</em>";
str.replace(/<em>([^e]+)<\/em>/g, function(match, emInner) {
  console.log(emInner.replace(/[^0-9]/g, ''));
});

Это печатает 449570.

0 голосов
/ 01 ноября 2011

РЕДАКТИРОВАТЬ: <em>(?:(?:<b>)?[0-9]*(?:</b>)?)*</em>

РЕДАКТИРОВАТЬ 2: <em>(?:\D*(\d+)\D*)*?</em> для обработки нецифровых символов в миксе, в действительности это выглядит более простым событием, чем первое:).

...