Я хочу найти любое слово с минимальной длиной (например, 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, находятся ли они внутри тега или как это возможно?
большое спасибо!
(?<=\/|<)(\w{4,})(?=>)|\b(\w{4,})
Вы можете попробовать это.Part 1
матча всегда будет из тегов.Part 2
матча будут другие нормальные слова.
Смотрите демо.
<\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, поэтому вам нужно использовать \ перед ним, если он