正则表达式:匹配字符序列和重复组

问题描述 投票:0回答:1

我正在尝试设置正则表达式来验证变量名称。 规则相对简单,但我不是 reg-ex jedi :)

必须以字母或下划线开头

[a-zA-Z_]

后面可以跟任何重复的字母或数字,或者短划线“-”下划线“_”或点“.”

[a-zA-Z_0-9\-\.]*

到目前为止一切顺利

[a-zA-Z_][a-zA-Z_0-9\-\.]*

但它也可能包括这种模式的多次重复

\[\w+\]
这个模式,就像任何其他字符一样,它可以出现任意多次,除了第一个字母。

所以我尝试了一些选项,例如

[a-zA-Z_][a-zA-Z_0-9\-\.]*(\[\w+\])*

[a-zA-Z_][a-zA-Z_0-9\-\.(\[\w+\])]*

我一直没时间找到正确的语法。

这个想法非常简单,它是一种模式,它可以像第二个序列中的任何字符一样定位,一次或多次,以任何顺序

如果不清楚,请参阅下面的示例

### valid examples
valid_var_name[a]
valid3_va[x].[y].name
valid_myVar[w].x
valide_myVar[a1].sub[b].SUB1_2[c].sub[d1].sub[d1].sub[d1].sub[d1].sub[d1].sub[d1].isValid

### invalid examples
2invalid     // start with a number
.invalid     // start with a dot
invalid[]    // nothing between bracket
invalid].name      // char ] alone is invalid
invalid[.]name     // [.] dot is not a word
invalid[].name[1]  // [] without a word not valid  
java regex
1个回答
0
投票
^[a-zA-Z_]([\w\-.]|\[\w+\])*$

以字母或下划线开头,然后允许任何字母数字、

-
.
[name]

的任何序列

需要锚点,这样它就不会匹配字符串中间的变量,例如

variable
中的
2variable

演示

© www.soinside.com 2019 - 2024. All rights reserved.