3 回答
TA贡献2051条经验 获得超10个赞
要结合您的标准,请在例如非捕获组中使用单独的替代字符集 [],因此
"[bla|^h]*"
将会
(?:[bla]*|[^h]*)+
这类似于“至少出现一次(b,l,a或不是h)”
请记住,匹配*
意味着“可能发生”(技术上为零或更多)
TA贡献1765条经验 获得超5个赞
“not h”可以有多种写法:
(?!.*h.*)
[^h]*
“b、l、a 中的任何一个” 1:
[bla]*
1) 假设您的意思是“只有 b、l、a 之一”,否则问题中的所有 4 个示例都是true
结合使用or将是:
[^h]*|[bla]*
这意味着“必须是一个不包含 的字符串h,或者必须是一个仅由b、l和a字符组成的字符串。
在这种情况下, 的顺序|没有区别,因此[^h]*|[bla]*和 的[bla]*|[^h]*作用相同。
System.out.println("blah".matches("[bla]*|[^h]*")); //false
System.out.println("blah".matches("[^h]*|[bla]*")); //false
System.out.println("blah".matches("[bla]*|[^n]*")); //true
System.out.println("blah".matches("[^n]*|[bla]*")); //true
TA贡献1887条经验 获得超5个赞
对于前 2 个条件,您可以使用:
^(?:[bla]|[^h])*$
接下来 2 你可以使用:
^(?:[bla]|[^n])*$
正则表达式详细信息:
^
: 开始(?:
: 启动非捕获组[bla]
: 匹配其中之一b or l or a
:|
: 或者[^h]
: 匹配任何不是的字符h
)*
: 结束非捕获组,匹配0个或多个该组$
: 结束 正则表达式演示
请注意,对于.matches
,锚点是隐式的,因此您可以省略^
和$
。
添加回答
举报