得到重音preg_match_all语法PHP

时间:2015-10-08 21:48:36

标签: php regex

我有这个preg_match_all来获取主题标签:

  preg_match_all('/(^|[^a-z0-9_])#([a-z0-9_]+)/ui', $text, $matchedHashtags);

效果很好,但如果找到一些重点则停止:

#hash //works
#hash_hash //works
#hash_não // get just $hash_n

我需要改变什么?

2 个答案:

答案 0 :(得分:3)

您可以使用Unicode category Letter


正则表达式:

/(?<![\p{L}0-9_])#([\p{L}0-9_]+)/u

regex101 Demo

  • 另一种选择是在character class中添加重音字符:

    /(?<![a-zãàÀèÈìÌ0-9_])#([a-zãàÀèÈìÌ0-9_]+)/ui
    

<强> <子> [编辑]

关于\p令牌

设置/u标志时,

支持Unicode。使用以下类别或脚本有一些匹配字母的替代方法:

1。 \p{Latin}拉丁文

  • 匹配:Latin script characters来自英语,法语,德语,意大利语,越南语,拉丁语本身以及其他几种语言(包括一些修饰字母和其他字母)。
  • 代码点:1,349

2。 \p{L&}无壳字母

3。 \p{L}所有字母

4。 \p{Xan}任何字母数字字符

  • 匹配:\p{L}\p{N} Number(来自任何脚本)。
  • 代码点:18,843(18,057 + 786)

5。 \p{Xwd}任何Perl&#34;字&#34;字符

  • 匹配:\p{Xan}和下划线。
  • 代码点:18,844

答案 1 :(得分:1)

尝试:

(^|\w)#(\w+)

demo

使用u,g和m模式