正则表达式查找所有utf8文本,以#开头,以空格结束或输入

时间:2016-07-31 06:53:44

标签: regex

我想渲染Utf8文字并链接所有以#开头并以spaceenter结尾的标记或任何分隔符,例如\r \t { {1}}。

文字示例:

\n

1 个答案:

答案 0 :(得分:2)

我假设你也希望得到那些具有正常ascii字符的人

然后这个:

<?php
$description = 'Текстовые теги #общий #тест
Хиджаб в исламе, философии безопасности #женщин
english #teg #test';

preg_match_all('/(?<=#)\w+(?=\s|$)/u',$description,$matches,PREG_PATTERN_ORDER);

var_dump($matches);

会给你一个数组: "общий","тест","женщин","teg","test"

u修饰符使得\ w也捕获unicode单词字符 \ w相当于[\p{L}\p{N}_]:字母,数字或下划线。

(?<=#)是一个积极的外观,告诉正则表达式在\ w +之前需要有一个#

(?=\s|$)是一个积极的先行,它告诉正则表达式在\ w +之后需要有一个不可见的字符(\ s相当于[\p{Z}\h\v])。
或者行$的结尾(也是为了捕捉没有它的test)。

但你可能想要消除这种积极的前瞻。除非您需要后跟空格,因为例如#общий!不应该匹配。

如果你需要更具体一点,我建议你看看你可以用那些\ p {} here做什么。 并与他们一起玩,例如here