从 mysql 中的字符串中获取散列标签
To fetch hash tags from a string in mysql
朋友们,
我想从一个字段中获取主题标签。
select PREG_RLIKE("/[[:<:]]abcd[[:>:]]/","okok got it #abcd");
//output 1
但是
select PREG_RLIKE("/[[:<:]]#abcd[[:>:]]/","okok got it #abcd");
//output 0
不明白为什么 #
不考虑
请帮助
模式匹配:
[[:<:]]
- 前导词边界
#abcd
- 文字字符串
[[:>:]]
- 尾随单词边界。
由于前导单词边界是非单词和单词字符(或字符串的开头和单词字符)之间的位置,因此您不能期望它在 space 之间匹配(非字字符)和哈希符号 (#
).
由于您使用的是基于 UDF function 的 PCRE,请使用环视:
select PREG_RLIKE("/(?<!\w)#abcd(?!\w)/","okok got it #abcd");
(?<!\w)
如果搜索词前面有一个单词 char,(?<!\w)
负向后视就像前导词边界一样无法匹配,如果后面是搜索词,(?!\w)
负向后视会导致匹配失败用一个词 char.
参见regex demo。
朋友们, 我想从一个字段中获取主题标签。
select PREG_RLIKE("/[[:<:]]abcd[[:>:]]/","okok got it #abcd");
//output 1
但是
select PREG_RLIKE("/[[:<:]]#abcd[[:>:]]/","okok got it #abcd");
//output 0
不明白为什么 #
不考虑
请帮助
模式匹配:
[[:<:]]
- 前导词边界#abcd
- 文字字符串[[:>:]]
- 尾随单词边界。
由于前导单词边界是非单词和单词字符(或字符串的开头和单词字符)之间的位置,因此您不能期望它在 space 之间匹配(非字字符)和哈希符号 (#
).
由于您使用的是基于 UDF function 的 PCRE,请使用环视:
select PREG_RLIKE("/(?<!\w)#abcd(?!\w)/","okok got it #abcd");
(?<!\w)
如果搜索词前面有一个单词 char,(?<!\w)
负向后视就像前导词边界一样无法匹配,如果后面是搜索词,(?!\w)
负向后视会导致匹配失败用一个词 char.
参见regex demo。