小编Att*_*osz的帖子

如果string*only*包含来自字符集的*all*字符加上可选字符集,则匹配正则表达式

我遇到了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)

java regex string

10
推荐指数
1
解决办法
1551
查看次数

标签 统计

java ×1

regex ×1

string ×1