2014-10-08 4 views
0

Я хочу найти любое слово с длиной min (eq 4) в тексте, которое также может быть между тегами, например <strong> или <h1> и т. Д. После этого я хочу сделать своего рода взвешивание этого слова. Нормальные слова просто становятся более низким, чем слова между <strong>. Но слова не должны быть одни в более скользящем теге (например, сильном).Как найти любое слово в тексте, но дифференцировать внутри тегов?

Пример содержания

Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor 
invidunt ut labore et dolore <strong>magna aliquyam erat</strong>, sed diam voluptua. 
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor 
invidunt ut labore et dolore <strong>magna</strong> aliquyam erat, sed diam voluptua 

Могу ли я сделать это с помощью регулярных выражений, как найти любое слово и проверить в препрега обратного вызова, являются ли они внутри тега или как это возможно?

спасибо большое!

+0

Каков ваш ожидаемый результат? –

ответ

0
(?<=\/|<)(\w{4,})(?=>)|\b(\w{4,}) 

Вы можете попробовать это. Part 1 матча всегда будет из тегов. Part 2 матча будут другими нормальными словами.

См. Демонстрационную версию.

http://regex101.com/r/hQ1rP0/74

+0

Оба ответа выглядят хорошо. Благодаря! Но можно ли сделать такой результат, как этот массив? '[0] [0] = 'lorem', [0] [1] = '', [1] [0] = 'ipsuminbold', [1] [1] = 'strong'' и после все делают это со всеми словами в сильном теге и не все предложение в сильном теге? ... спасибо – HR123

0
<\w*>([a-zA-Z0-9 ]{4,})</\w*> 

Вы можете использовать это, чтобы обмотать текст между тегами, то вы подсчитывать количество пробелов в этом тексте, чтобы узнать, сколько слов он имеет и придать ему в соответствии взвешивания, вы контролируете мин длину с {4} в этом случае его 4 или более

для нормальных слов вы просто использовать

\w{4,} 

Это все?

О, вы, наверное, хотели что-то вроде этого?

<\w*>(?<case1>[a-zA-Z0-9 ]{4,})</\w*>|(?<case2>\w{4,}) 

В группе case1 есть слова, которые находятся между тегами, а в случае 2 - слова, которые не находятся между тегами. Кстати, я не знаю точно, как захват группы в PHP сделаны таким образом, регулярное выражение может выглядеть немного difrent и «/» может быть побег символ в PHP и поэтому вы должны использовать \ перед ним, если это

http://regex101.com/r/iR5lW1/1

+0

Оба ответа выглядят хорошо. Благодаря! Но можно ли сделать такой результат, как этот массив? [0] [0] = 'lorem', [0] [1] = '', [1] [0] = 'ipsuminbold', [1] [1] = 'strong' и в конце концов делать это со всеми словами в сильном теге и не все предложение в сильном теге? ...благодаря – HR123

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

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