2016-06-20 3 views
2

Я пытаюсь извлечь извлечения хэштегов в текст HTML с регулярным выражением #([a-z0-9_]+), но с проблемами в атрибутах HTML.Regex pattern, чтобы соответствовать хэштегу, но не в атрибутах HTML

Например, в HTML тексте:

hola que tal with #hash1. 
hola que tal with #hash2 

y <a href="hola.que.tal#hash3"> para #hash4. </a> 

Я хочу, чтобы восстановить "hash1", "hash2" и "hash4", но не "hash3".

я пытался решить ее с lookarounds, со следующим выражением:

(?<!<)#([a-z0-9_]+)(?!.*?>) 

, но без успеха.

Как я могу это сделать с помощью одного регулярного выражения?

+0

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

+0

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

+0

Почему вы хотите сделать это всего за один шаг (регулярное выражение)? –

ответ

2

Это должно работать

/#[a-z0-9_]+(?![^<]*>)/ 

См http://www.regexpal.com/?fam=95144

Что отрицательный предпросмотр делает убеждается, что есть < между хэштегом и следующей >.

+0

Большое регулярное выражение. Я прилагаю результат, потому что мне нужно зафиксировать результат. Отредактировано с помощью вашего решения. Благодаря! –

 Смежные вопросы

  • Нет связанных вопросов^_^