簡體   English   中英

使用php regex從包含html標記的文本中獲取所有單詞

[英]Get all words from text containing html tags with php regex

我目前正在嘗試使用PHP從包含html標簽的文本中獲取所有單詞

我的正則表達式有問題,如果一個單詞以重音結尾(例如“é”),那么我的單詞不會被捕獲。

我的正則表達式是

$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 live example

為什么此正則表達式不匹配帶有重音符號的最后一個字符?

如果要使用正則表達式,可以使用:

<[^>]+>(*SKIP)(*FAIL)|([A-zÀ-ÿ]+)

工作演示

請注意,正則表達式字符類中的字符范圍使用ASCII范圍,我采用了最簡單的方法,但請記住,該范圍包含您可能不需要的符號。 如果要支持特定字符,請檢查ascii表並使用所需范圍

此外,如果要將c'est捕獲為單個單詞,則只需在字符類中添加單引號,如下所示:

<[^>]+>(*SKIP)(*FAIL)|([A-zÀ-ÿ']+)

編輯:如果您檢查氣泡泡泡注釋,您會發現unicode標志的非常有用的用法。 引用他的評論,您可以通過利用u (unicode)標志來使用非常簡單的正則表達式,如下所示:

<[^>]+>(*SKIP)(*FAIL)|([\w']+)

工作演示

如果您希望Dessine-moi分隔的單詞-例如Dessine-moi作為單個單詞而不是2進行匹配,只需將連字符添加到caracter類中,如下所示:

<[^>]+>(*SKIP)(*FAIL)|([\w'-]+)

編輯2:由於您是第二次編輯問題,並且還評論說不想使用初始連字符,因此可以使用此正則表達式:

<[^>]+>(*SKIP)(*FAIL)|([\w']+(?:[\w'-]*))

工作演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM