0

我想在文本中找到任何具有最小长度(eq 4)的单词,它也可以在诸如<strong><h1>等标签之间。之后我想对这些单词进行某种加权。正常单词只是变得比 a 之间的单词低<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 回调中检查它们是否在标签内,或者这怎么可能?

多谢!

4

2 回答 2

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

你可以试试这个。Part 1匹配的将始终来自标签。Part 2匹配的将是其他正常的单词。

见演示。

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

于 2014-10-08T10:47:38.680 回答
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 中的捕获组是如何完成的,因此正则表达式可能看起来有点不同,并且“/”也可能是 PHP 中的转义字符,所以如果是,您需要在它之前使用 \

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

于 2014-10-08T10:48:04.490 回答