首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用php regex从包含html标记的文本中获取所有单词。

使用php regex从包含html标记的文本中获取所有单词。
EN

Stack Overflow用户
提问于 2016-11-16 18:40:36
回答 1查看 212关注 0票数 1

我目前正在使用PHP尝试从包含html标记的文本中获取所有单词

我的regex有一个问题,如果一个单词带有重音(例如"é“),我的单词就不会被捕捉到。

我的判罚是

代码语言:javascript
运行
复制
$re = '/([^\r\n\t\f>< /]+(?!>))\b/';
$str = 'Non ! Non ! Je ne veux pas d\'un éléphant dans un boa.<br>
<p> Un boa c\'est très dangereux, et un éléphant élévé c\'est très encombrant. Chez moi c\'est tout petit. J\'ai besoin d\'un mouton. Dessine-moi un mouton.
</p>
-Laisse-moi dire mouton... For saints have hands that pilgrims\' hands do touch

';

代码语言:javascript
运行
复制
preg_match_all($re, $str, $matches);

// but word elevé is not completely match
print_r($matches);

但是,在我的例子中,"élévé“这个词不匹配

请在这里找到一个例子:regex活例

为什么这个正则表达式不匹配最后一个字符的口音?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-16 20:05:23

如果要使用regex,可以使用:

代码语言:javascript
运行
复制
<[^>]+>(*SKIP)(*FAIL)|([A-zÀ-ÿ]+)

工作演示

请注意regex字符类中的字符范围使用ASCII范围,我使用了最简单的方法,但请记住,该范围包含您可能不想要的符号。如果要支持特定字符,请检查ascii表并使用所需的范围。

此外,如果要将c'est捕获为单个单词,则只需将单引号添加到字符类中,如下所示:

代码语言:javascript
运行
复制
<[^>]+>(*SKIP)(*FAIL)|([A-zÀ-ÿ']+)

编辑:--如果您检查了波波泡注释,您将发现对波波泡标志的使用非常有用。引用他的评论,您可以通过使用u (unicode)标志来使用非常简单的正则表达式,如下所示:

代码语言:javascript
运行
复制
<[^>]+>(*SKIP)(*FAIL)|([\w']+)

工作演示

如果希望用- (如Dessine-moi )分隔的单词与单个单词(而不是2 )匹配,只需向caracter类添加连字符,如下所示:

代码语言:javascript
运行
复制
<[^>]+>(*SKIP)(*FAIL)|([\w'-]+)

编辑2:,因为您第二次编辑了您的问题,并且还评论说您不需要初始的连字符,那么您可以使用这个正则表达式:

代码语言:javascript
运行
复制
<[^>]+>(*SKIP)(*FAIL)|([\w']+(?:[\w'-]*))

工作演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40639815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档