Как найти любое слово в тексте, но различать внутри тегов?

Я хочу найти любое слово с минимальной длиной (например, 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

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

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

0

Решение

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

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

Смотрите демо.

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

0

Другие решения

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

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

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

\w{4,}

Это все?

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

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

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

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

0

По вопросам рекламы [email protected]