正则表达式用于字母数字和一些不相邻的特殊字符

时间:2015-10-13 09:14:08

标签: sql regex oracle

我希望有一个正则表达式来创建一个检查

的Oracle SQL REGEXP_LIKE查询
  • 如果字符串以一个字母数字字符开头
  • 如果字符串以一个字母数字字符结尾

  • 如果"身体"字符串只包含字母数字字符OR这些授权字符(书面):连字符(破折号),点,撇号,空格

  • 如果授权字符不相邻(以避免类似"他 - '' l ..' -lo")

我从这开始:

^[a-zA-Z0-9]+(a-zA-Z0-9\-\.'|([^\-\.'])\1)*[a-zA-Z0-9]$

我使用反斜杠来假设点和连字符是元字符

2 个答案:

答案 0 :(得分:0)

假设您的意思是“授权字符彼此不相邻”

沿着这些方向尝试一些事情

^[a-zA-Z0-9]+([a-zA-Z0-9]+[\-\.' ]?)*[a-zA-Z0-9]$

这样重复的中间部分总是有一个字母数字字符后跟零到一个特殊字符。

答案 1 :(得分:0)

我认为这就是你想要的:

^[a-zA-Z0-9]+([-.' ][a-zA-Z0-9]|[a-zA-Z0-9])*\w?$

寻找

  • 至少1个字母数字(alnum),

接着是

  • 授权字符后跟字母数字只是一个字母数字,重复任意次数(包括0)。

可选地后跟

  • alnum

这符合您的规格。我不确定是以一个alnum 开头而以一个alnum结尾意味着必须至少有2个alnum,或者它们是否相同。如果必须至少有2个,请删除最后一个?(使最后一个alnum可选)。

此致