不会以特定字符编译问题结束的正则表达式



我必须创建一个正则表达式来满足这个条件:

  • 单词可以以非强制性_
  • 开头
  • 后面跟着[a-zA-Z]
  • 接[a-zA-Z0-9_]—0次或以上
  • 不能以_
  • 结尾

我已经实现了这个解决方案:

_*[a-zA-Z][a-zA-Z0-9_]*[^_]$

这个正则表达式可以检测如下变量:

try_it

但是它不能检测如下变量:

x, y, z

这个正则表达式将用于词法分析

可接受:

a100__version_2
_a100__version2
x
y
z

非接受:

100__version_2
a100__version2_
_100__version_2
a100--version-2

如果支持反向查看:

^_?[a-zA-Z][a-zA-Z0-9_]*$(?<!_)
  • ^字符串
  • 起始
  • _?匹配可选的下划线
  • [a-zA-Z]匹配单个字符a- za -z
  • [a-zA-Z0-9_]*匹配0+次所列字符
  • $字符串结束
  • (?<!_)负向后看,断言不是_直接到左边

查看正则表达式演示。

或使用_*匹配单词字符和0个或多个前导下划线,如问题中的模式:

^_*[a-zA-Z]w*$(?<!_)

查看另一个正则表达式演示。

这个在匹配你接受的单词时可能会派上用场:

^_?[a-zA-Z](?:[a-zA-Z0-9_]+[^_])?$

正则表达式的解释:

  • ^:字符串符号
  • _?:可选下划线
  • [a-zA-Z]: a字母
  • (?:[a-zA-Z0-9_]+[^_])?:不以下划线结尾的可选字符集
  • $:结束字符串符号

点击这里查看演示。

可选注意:如果您只允许最后一个非下划线字符为字母数字字符,您可以将[^_]更改为[a-zA-Z0-9]

^_?= =比;可以以非强制性_

开头[a-zA-Z] = =比;然后是[a-zA-Z](也满足下两个条件,因此?下图)

[ (- za - z0 - 9 _] * [a-zA-Z0-9] ) ?$ = =比;后面跟着[a-zA-Z0-9_]—0次或以上,并且不能以_

结尾…将所有这些放在一起进行测试,如下所示:

Mac_3.2.57$echo "a100__version_2" | grep '^_?[a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?$'
a100__version_2
Mac_3.2.57$echo "_a100__version2" | grep '^_?[a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?$'
_a100__version2
Mac_3.2.57$echo "x" | grep '^_?[a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?$'
x
Mac_3.2.57$echo "y" | grep '^_?[a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?$'
y
Mac_3.2.57$echo "z" | grep '^_?[a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?$'
z
Mac_3.2.57$echo "100__version_2" | grep '^_?[a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?$'
Mac_3.2.57$echo "a100__version2_" | grep '^_?[a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?$'
Mac_3.2.57$echo "_100__version_2" | grep '^_?[a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?$'
Mac_3.2.57$echo "a100--version-2" | grep '^_?[a-zA-Z]([a-zA-Z0-9_]*[a-zA-Z0-9])?$'

最新更新