【问题标题】:Regex to match numeric and special characters正则表达式匹配数字和特殊字符
【发布时间】:2019-06-16 21:36:32
【问题描述】:

我需要符合以下值的正则表达式:

  1. abc123 - 不匹配
  2. 123 - 匹配
  3. a123bc - 不匹配
  4. a#b%c - 匹配
  5. 13&ab12% - 匹配
  6. আফ্রিকার - 不匹配

简而言之,它只匹配数字字符串和任何带有特殊字符(#,&,%)的字符串。它也与任何其他语言字符串不匹配。

我尝试了这个正则表达式,但它对我不起作用。

"^[\\d][#&%]+$"

【问题讨论】:

  • 您的正则表达式显示:“匹配一个非数字字符,后跟任何不是#&% 的字符,一次或多次”。也许您应该查看正则表达式的规则。
  • 应该#আফ্রিকার匹配吗?

标签: java


【解决方案1】:

试试下面的正则表达式:

^((?=.*[#&%]).+|\d+)$

解释:

^               -> Start of the string
(?=.*[#&%]).+   -> Match at least one special character (#,&,%) from One or more character
|               -> Or Condition
\d              -> Match digit
$               -> End of the String 

【讨论】:

  • 糟糕。谢谢@Pshemo
  • 如果我没记错的话,(?=.*[#&%]).+ 将与 .*[#&%].+ 匹配。无论如何,有些东西告诉我我们不能使用.*,因为它会匹配 any 字符,但 OP 声称“它不匹配任何其他语言字符串”,这可能会建议 \w* 代替(或其他东西一样)。但要确保 OP 需要回答 #আফ্রিকার 是否应该匹配。
  • @Pshemo 当字符串只包含一个特殊字符时,第一个不匹配,第二个匹配
  • @AshrafulIslam 感谢您的回答。现在我可以有相反的正则表达式吗?例如。 abc123 应该匹配,但 123 不应该匹配。
  • 使用这个正则表达式:"(?U)^((?=\\p{Alnum}*\\p{Alpha})\\p{Alnum}+)$" 检查这个链接@ 987654321@解释
【解决方案2】:

试试类似的东西

"^\\d+|(.*[#&%].*)$"

【讨论】:

  • 在 Java 中没有 /regex/flags 语法,因此您需要删除封闭的 /。此外,您可能指的是 \d 而不是 \D,因为 OP 想要 接受仅包含数字的字符串。
  • 是的,对不起。我编辑了我的答案(我将/.../ 放在正则表达式上以获得更通用的答案,但由于这是标记为java,而不是正则表达式,因此这种方式可能更好)
猜你喜欢
  • 2021-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-06
  • 2020-12-28
  • 2022-08-17
相关资源
最近更新 更多