如何计算MySQL /正则expression式replace器中的单词?

我怎么能在一个MySQL查询,具有相同的行为Regex.Replace函数(例如在.NET / C#中)?

我需要这个,因为我想统计一个字段中的字数。 但是,我不满意以下答案(在该网站上多次提供):

SELECT LENGTH(name) - LENGTH(REPLACE(name, ' ', '') +1 FROM table 

因为当两个单词之间有一个空格时,它不会给出好的结果。

顺便说一句,我认为Regex.Replace函数可能是有趣的,所以所有的好主意都欢迎!

作为MySQL用户定义的函数,有REGEXP_REPLACE可用。

字数统计:如果您可以控制数据进入数据库,则可以在插入前删除双空白字符。 此外,如果您经常访问字数,则可以在代码中计算一次,并将计数存储在数据库中。

几乎是这个问题的重复,但这个答案将尝试解决从这个答案基于自定义正则expression式replace器的高级版本计算单词的用例。

SQL小提琴演示

对于示例文本,这给了106的计数 – 与我试过的所有在线单词计数器相同(例如https://wordcounter.net/ )。

SQL (为简洁起见,不包括函数代码)

 SELECT txt, -- Count the number of gaps between words CHAR_LENGTH(txt) - CHAR_LENGTH(reg_replace(txt, '[[:space:]]+', -- Look for a chunk of whitespace '^.', -- Replace the first character from the chunk '', -- Replace with nothing (ie remove the character) TRUE, -- Greedy matching 1, -- Minimum match length 0, -- No maximum match length 1, -- Minimum sub-match length 0 -- No maximum sub-match length )) + 1 -- The word count is 1 more than the number of gaps between words - IF (txt REGEXP '^[[:space:]]', 1, 0) -- Exclude whitespace at the start from count - IF (txt REGEXP '[[:space:]]$', 1, 0) -- Exclude whitespace at the end from count AS `word count` FROM test; 

答案是否定的,你不能在MySQL中有相同的行为。

但我build议你检查这个问题上的链接到一个UDF,这应该使一些function的这个主题。