正则表达式指定特定中文
正则表达式匹配中文人的名字?
正则表达式匹配中文人名?
认证中文姓名的正则表达式:[\\一-\\龥],这一关系式是专门用来匹配中文姓名的。【正则表达式】正则表达式,又被称为标准关系式,是计算机专业的一个概念,这个概念最初是由Unix里的软件工具普及化开。正则表一般被用来查找、更换这些合乎某一方式(标准)的文字。正则模块主要分为DFA、NFA两类。很多程序语言都支持利用正则表达式开展字符串操作。比如,在Perl中就内建了一个功能强大的正则表达式模块。【发源】在1951 年,一位名字叫做Stephen Kleene的数学课专家,她在Warren McCulloch和Walter Pitts初期工作中的基础之上,发布了一篇题目是《神经网事件的表示法》的论文,利用称作正则结合的数学符号来描述此实体模型,引入了正则表达式的概念。正则表达式被作为用于叙述其称作“正则集的解析几何”的一种关系式,因此使用了“正则表达式”这一专业术语。
怎样用正则表达式匹配中国汉字?
var str = '您好地世界世界'
假如想用正则表达式的形式找到str中'地'的下标
var re=/\\\\地/
console.log(str.search(re))
控制面板打印出出 2.
(这就是其中一个方式,立即在想匹配的中国汉字前边加\\\\),例如 /\\\\地/
mysql正则表达式如何匹配中文?
MySQL 一直以来都适用正则匹配,不过对于正则更换则一直到MySQL 8.0 才适用。对于这类情景,之前要不在MySQL端解决,要不把统计数据取出来在应用端解决。
例如我想把表y1的列str1的诞生第3个action的子 串更换成dble,如何完成?
1. 自己写SQL层的储存函数公式。编码如下所示写死了3个,并没有提升,只是做为演试,MySQL 里非常不提议写这种函数公式。
mysql
DELIMITER $$
USE `ytt`$$
DROP FUNCTION IF EXISTS `func_instr_simple_ytt`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `func_instr_simple_ytt`(
f_str VARCHAR(1000), -- Parameter 1
f_substr VARCHAR(100), -- Parameter 2
f_replace_str varchar(100),
f_times int -- times counter.only support 3.
) RETURNS varchar(1000)
BEGIN
declare v_result varchar(1000) default 'ytt' -- result.
declare v_substr_len int default 0 -- search string length.
set f_times = 3 -- only support 3.
set v_substr_len = length(f_substr)
select instr(f_str,f_substr) into @p1 -- First real position .
select instr(substr(f_str,@p1 v_substr_len),f_substr) into @p2 Secondary virtual position.
select instr(substr(f_str,@p2 @p1 2*v_substr_len - 1),f_substr) into @p3 -- Third virtual position.
if @p1 gt 0 ampamp @p2 gt 0 ampamp @p3 gt 0 then -- Fine.
select
concat(substr(f_str,1,@p1 @p2 @p3 (f_times - 1) * v_substr_len - f_times)
,f_replace_str,
substr(f_str,@p1 @p2 @p3 f_times * v_substr_len-2)) into v_result
else
set v_result = f_str -- Never changed.
end if
-- Purge all session variables.
set @p1 = null
set @p2 = null
set @p3 = null
return v_result
end
$$
DELIMITER
-- 调用函数来升级:
mysqlgt update y1 set str1 = func_instr_simple_ytt(str1,'action','dble',3)
Query OK, 20 rows affected (0.12 sec)
Rows matched: 20 Changed: 20 Warnings: 0
2. 导出来用sed之类的专用工具替换掉在导进,流程如下所示:(推荐使用)1)导出表y1的记录。
mysqlmysqlgt select * from y1 into outfile '/var/lib/mysql-files/y1.csv'Query OK, 20 rows affected (0.00 sec)
2)用sed更换导出来的数据。
shellroot@ytt-Aspire-V5-471G:/var/lib/mysql-files# sed -i 's/action/dble/3' y1.csv
3)再度导进处理好的数据信息,进行。
mysql
mysqlgt truncate y1
Query OK, 0 rows affected (0.99 sec)
mysqlgt load data infile '/var/lib/mysql-files/y1.csv' into table y1
Query OK, 20 rows affected (0.14 sec)
Records: 20 Deleted: 0 Skipped: 0 Warnings: 0
之上二种或是强烈推荐导出来处理好了再重新导进,特性来的高些,并且不用自己费力写函数代码。那MySQL 8.0 针对之上的场景完成就比较简单了,一个函数就搞定了。
mysqlmysqlgt update y1 set str1 = regexp_replace(str1,'action','dble',1,3) Query OK, 20 rows affected (0.13 sec)Rows matched: 20 Changed: 20 Warnings: 0
也有一个regexp_instr 也非常有用,尤其是这类专指发生第几次的场景。例如界定 SESSION 自变量@a。
mysqlmysqlgt set @a = 'aa bb cc ee fi lucy 1 1 1 b s 2 3 4 5 2 3 5 561 19 10 10 20 30 10 40'Query OK, 0 rows affected (0.04 sec)
取得最少两次的数据出现的第二次子串的位置。
mysqlmysqlgt select regexp_instr(@a,'[:digit:]{2,}',1,2)