我试图创建一个正则表达式模式来匹配一个特定的字符串,并返回true
如果字符串匹配的模式和false
如果不是。这里的条件是:Java正则表达式
- 必须与
[
开始和]
- 结束的每个项目内的支架必须用逗号隔开
- 用逗号隔开的每个项目都遵循这个正则表达式:
^[A-Za-z][A-Za-z0-9_]*$
如何让一个正则表达式检查所有这些条件?
我试图创建一个正则表达式模式来匹配一个特定的字符串,并返回true
如果字符串匹配的模式和false
如果不是。这里的条件是:Java正则表达式
[
开始和]
^[A-Za-z][A-Za-z0-9_]*$
如何让一个正则表达式检查所有这些条件?
在Java中,\w
没有Pattern.UNICODE_CHARACTER_CLASS
标志实际上与[a-zA-Z0-9_]
相同。所以,我会用
String pat = "\\[[a-zA-Z]\\w*(?:,[a-zA-Z]\\w*)*]";
查看IDEONE demo。与String#matches
一起使用,或者您必须在开头添加^
(或\\A
),并在末尾添加$
(或\\z
)。
String pat = "\\[[a-zA-Z]\\w*(?:,[a-zA-Z]\\w*)*]";
System.out.println("[c1,T4,yu5]".matches(pat)); // TRUE
模式解释:
\\[
- 字面[
[a-zA-Z]
- 英文字母(同\\p{Alpha}
)\\w*
- 从[a-zA-Z0-9_]
零个或多个字符集(?:
- 非捕获组匹配的开始...
,
- 逗号[a-zA-Z]\\w*
- 见上文)*
- ...零次或多次]
- 一个字面意思]
(不需要在字面类以外的字面上转义)。所以这与Zbynek的本质是相同的正则表达式,除了你用'\\ w'替换了'[a-zA-Z0-9_]'? –
如果是这样,那么两者都适合我。谢谢你的答案。 –
封闭组中可能重复:
\[[A-Za-z][A-Za-z0-9_]*(?:,[A-Za-z][A-Za-z0-9_])*\]
这是应该出现在最终的字符串。根据特定语言逃脱特价商品。
正则表达式使下半部分重复(减少回溯)更好,并且不需要捕获任何东西,所以:'[[A-Za-z] [A-Za-z0-9 _] *(? :,[A-Za-z] [A-Za-z0-9 _] *)* \]' – Andreas
是的。谢谢! –
任何地方都不允许有空格? – markspace