我目前正在使用PHP尝试从包含html标记的文本中获取所有单词
我的regex有一个问题,如果一个单词带有重音(例如"é“),我的单词就不会被捕捉到。
我的判罚是
$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';
preg_match_all($re, $str, $matches);
// but word elevé is not completely match
print_r($matches);但是,在我的例子中,"élévé“这个词不匹配
请在这里找到一个例子:regex活例
为什么这个正则表达式不匹配最后一个字符的口音?
发布于 2016-11-16 20:05:23
如果要使用regex,可以使用:
<[^>]+>(*SKIP)(*FAIL)|([A-zÀ-ÿ]+)请注意regex字符类中的字符范围使用ASCII范围,我使用了最简单的方法,但请记住,该范围包含您可能不想要的符号。如果要支持特定字符,请检查ascii表并使用所需的范围。
此外,如果要将c'est捕获为单个单词,则只需将单引号添加到字符类中,如下所示:
<[^>]+>(*SKIP)(*FAIL)|([A-zÀ-ÿ']+)编辑:--如果您检查了波波泡注释,您将发现对波波泡标志的使用非常有用。引用他的评论,您可以通过使用u (unicode)标志来使用非常简单的正则表达式,如下所示:
<[^>]+>(*SKIP)(*FAIL)|([\w']+)如果希望用- (如Dessine-moi )分隔的单词与单个单词(而不是2 )匹配,只需向caracter类添加连字符,如下所示:
<[^>]+>(*SKIP)(*FAIL)|([\w'-]+)编辑2:,因为您第二次编辑了您的问题,并且还评论说您不需要初始的连字符,那么您可以使用这个正则表达式:
<[^>]+>(*SKIP)(*FAIL)|([\w']+(?:[\w'-]*))https://stackoverflow.com/questions/40639815
复制相似问题