我遇到了Java正则表达式的小问题.(我必须提前说,我对Java或正则表达式都不是很有经验.)
我有一个字符串,以及一组三个字符.我想知道字符串是否仅由这些字符构建.另外(只是为了使它更复杂),两个字符必须在字符串中,而第三个字符是**可选*.
我确实有一个解决方案,我的问题是,如果有人能提供更好/更好/更优雅的东西,因为当我看到它时,这让我哭了...
强制字符有:(|
管道)和-
(破折号).
有问题的字符串应该由这些字符串组合而成.它们可以是任何顺序,但两者都必须在其中.
可选字符是:( :
冒号).
该字符串可以包含冒号,但它不必包含冒号.除上述两个外,这是唯一允许的其他角色.
禁止任何其他角色.
以下字符串应该工作/不工作:
"------" = false
"||||" = false
"---|---" = true
"|||-|||" = true
"--|-|--|---|||-" = true
Run Code Online (Sandbox Code Playgroud)
...和...
"----:|--|:::|---::|" = true
":::------:::---:---" = false
"|||:|:::::|" = false
"--:::---|:|---G---n" = false
Run Code Online (Sandbox Code Playgroud)
...等等.
现在,我有一个似乎有效的解决方案,基于这个stackoverflow答案.当你看到这个时,我想要一个更好的原因将变得明显:
if (string.matches("^[(?\\:)?\\|\\-]*(([\\|\\-][(?:\\:)?])|([(?:\\:)?][\\|\\-]))[(?\\:)?\\|\\-]*$") || string.matches("^[(?\\|)?\\-]*(([\\-][(?:\\|)?])|([(?:\\|)?][\\-]))[(?\\|)?\\-]*$")) {
//do funny stuff with a meaningless string
} else {
//don't do funny stuff …
Run Code Online (Sandbox Code Playgroud)