Как извлечь текст до и после известного маркера с регулярным выражением Perl? - PullRequest
2 голосов
/ 06 февраля 2009

Может кто-нибудь сказать мне, как определить среднюю часть interestedInThis и сделать обратную ссылку на префикс: fontsize=12 и постфикс: fontstyle=bold как ${1} и ${2}?

Я имею дело с этой строкой:

<fontsize=12 interestedInThis fontstyle=bold>

Приложение: Извините, я не был достаточно точен, вот подробности:

  • префикс и постфикс могут отсутствовать
  • Префикс и постфикс могут быть любой строкой, необязательно размером шрифта, соответственно FontStyle
  • Я точно знаю, что я ищу, а именно interestedInThis, и оно будет разделено пробелами.

Ответы [ 5 ]

3 голосов
/ 06 февраля 2009
<([^>]*)interestedInThis([^>]*)>
0 голосов
/ 07 февраля 2009

Я думаю, это то, что вы хотите;

<(.* )?InterestedInThis( .*)?>

Он вернет пре- и пост-исправление, если они там есть, но все равно будет совпадать, если присутствует только один или ни одного.

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

В качестве альтернативы, вы можете использовать lookahead / lookbehind, чтобы попытаться отфильтровать пробелы как часть совпадения:

<(.*(?= ))? ?InterestedInThis ?((?<= ).*)?>
0 голосов
/ 07 февраля 2009

Попробуйте это:

my $result = m/(.*)(InterestedInThis)(.*)/;

Сейчас:

  • $result истина, если найдено соответствие формату.
  • InterestedInЭто в $2, хотя вы уже знаете, что это такое.
  • префикс (ВСЕ перед "InterestedInThis") находится в $1.
  • Постфикс (ВСЕ после "InterestedInThis") находится в $3.
0 голосов
/ 06 февраля 2009

В основном

(<fontsize=12) (\S*) (fontstyle=bold>)

Но изменится ли значение атрибута? И вы должны учитывать переменные пробелы? Если так, то вышеприведенное видоизменяется в:

(<fontsize=\d+)\s+(\S*)\s+(fontstyle=.*>)

Кроме того, в приведенном выше примере с помощью \ S интересуется. Это может содержать все, что не является пробелом. Если там также есть пробелы, например, интересно. Это на самом деле что-то вроде class="x" id="y", тогда, возможно:

(<fontsize=\d+)(.*)(fontstyle=.*>)

Обратите внимание, что в этом заинтересованы 2 доллара, а 1 доллар / 3 на самом деле являются вашими конечными элементами.

0 голосов
/ 06 февраля 2009

Для вашего примера это может работать

(<fontsize=\d+) (\w+) (fontstyle=bold>)

К сожалению, Perl, похоже, не поддерживает именованные обратные ссылки, поэтому я думаю, что вы застряли с <fontsize=12 in $1, ImInterestedInThis in $2 & fontstyle=bold> in $3.

С уважением, Ливны

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...