问一个regex 的问题

f
felali9
楼主 (北美华人网)
我有一个regular expression 的难。就是我的用户名可能有前缀也可能有后缀,或者后面直接跟个数字,怎样吧这个用户名单单取出来呢, 用MySQL怎么实现?
g
gokgs
都不明白你在说什么, 应该举个例子说明。
f
felali9
Previewxiaoming1-htnn 这里preview 前缀,有时有,有时没有。后面1也是有时有有时没有,也有可能是任何一位或者两位数或者三位数,后面-的后缀也是,有时有有时没有。也不一定是htnn .总之,我只想提取xiaoming
f
freetalk98
PERL下大概是 /(Preview|^)(.+?)\d*(-.+|$)/
K
KOH
那你就用好多条 case when 好了
b
blindbox
用 LIKE 试试, LIKE '%xiaoming%' ?
W
WernerCA
回复 1楼felali9的帖子
(^Preview)*([a-zA-Z]*)([0-9]*)(-*)(\w*)
h
hellosmallworld
好像不是regex的用法,但是可以这样吗?把前缀去掉,-后面的去掉,假设要提取的部分没有数字就把后面的1-3位数字去掉。如果能有数字的话就无法判断要去几位啊,还有万一用户名是preview开头也会有bug
f
felali9
谢谢大家。我试试
c
chufanpeng
请看ChatGPT的回答: 如果要在 MySQL 中使用正则表达式提取用户名,可以使用 MySQL 的正则表达式函数 REGEXP 或 RLIKE。 例如,假设你有一个表 users,其中有一列 username,里面有各种带有前缀、后缀或数字的用户名。你可以使用以下查询来提取用户名: SELECT username FROM users WHERE username REGEXP '^[^0-9][^_]*[^0-9]$'; 上面的查询使用了正则表达式 '^[^0-9][^_]*[^0-9]$',它表示用户名必须以非数字字符开头,中间可以包含任意数量的非数字、非下划线字符,最后以非数字字符结尾。 这样,就可以通过正则表达式在 MySQL 中提取用户名了。 注意:正则表达式是一种复杂的工具,需要较强的字符串处理能力。如果你对正则表达式不熟悉,可以参考相关教程学习,或者请数据库专业人员帮助解决。
f
fivecolor
用CHARINDEX