regex 用于查找不以数字开头的单词的正则表达式

oknrviil  于 2022-12-30  发布在  其他
关注(0)|答案(3)|浏览(146)

我需要匹配带有 * identifier * 的字符串。

模式

任何单词都将被视为 * 标识符 *,如果

  1. Word不包含除字母数字字符以外的任何字符。
    1.单词不是以数字开头的。

输入

给定的输入字符串将不包含任何前导空格、尾随空格或空白字符。

代码

我尝试使用以下正则表达式
1.第一个月

  1. [ \t\n][a-zA-Z]\w*[ \t\n]
  2. ^\D[a-zA-Z]\w*$
    它们都不管用。
    我怎样才能做到这一点?
nnsrf1az

nnsrf1az1#

注意,在^\D[a-zA-Z]\w*$正则表达式中,\D可以匹配非字母数字字符,因为\D匹配任何非数字字符,\w还匹配下划线,下划线不是字母数字字符。
我建议

^(?![0-9])[A-Za-z0-9]*$

它符合

  • ^-字符串开始
  • (?![0-9])-当前位置右侧不允许有任何数字
  • [A-Za-z0-9]*-零个或多个ASCII字母/数字
  • $-字符串结束。

请参见regex demo

e5njpo68

e5njpo682#

\D匹配任何非数字字符,不仅包括字母,还包括标点符号、空白字符等,并且您肯定不需要在开头使用它们。
您可以使用^[A-Za-z][A-Za-z0-9]*$,它可以描述为

  • ^:字符串的开头
  • [A-Za-z]:字母表
  • [A-Za-z0-9]*:字母数字字符,零次或多次
  • $:字符串结束

Demo

eit6fx6z

eit6fx6z3#

  • identifier * 的一个更简单的模式-不像Wiktor's answer那样使用 * negative lookahead *:

^[^0-9][A-Za-z0-9]*$分解并解释:

  1. ^[^0-9]:单词以数字0-9]开始,而不是以数字[^开始(更准确地说,第一个字符不是数字,但第二个字符可以是数字!)。
  2. [A-Za-z0-9]*:在$结束之前,Word不包含除字母数字字符以外的任何字符(连字符或下划线也不包含)。
    参见demo on regex101

积极备选方案

作为already suggested by Arvind Kumar Avinash:如果(根据这两个规则)第一个字符不能是数字或数值,而只能是字母,那么我们也可以将上述正则表达式的第一部分从"非数值"替换为"仅字母"。
[A-Za-z][A-Za-z0-9]*解释:

  1. [A-Za-z]:第一个字符必须是字母
  2. [A-Za-z0-9]*:可选的第二个字符和后续字符可以是任何字母数字
    效果相同,参见demo on regex101

测试

| 输入|结果|原因|
| - ------| - ------| - ------|
| aB123|匹配标识符||
| 阿布123|匹配标识符||
| XXXX12YZ公司|匹配标识符||
| a2b3|匹配标识符||
| 项目a|匹配标识符||
| Z型|匹配标识符||
| 无|无匹配|以数字开头|
| 1Ab|无匹配|以数字开头|
| 12abc|无匹配|以数字开头|
| abc_123|无匹配|包含下划线,而不是字母数字|
| r2-d2|无匹配|包含连字符,而不是字母数字|

相关问题