【问题标题】:Regex in Java - Match anything, except '*' characterJava 中的正则表达式 - 匹配除 \'*\' 字符以外的任何内容
【发布时间】:2022-12-09 04:42:20
【问题描述】:

好的,所以我正在尝试创建一个正则表达式,这将确保这两件事:

  1. 字符串包含两个“*”
  2. 字符串以 3 位数字结尾

    我做了一些东西,哪种作品,但它不能确保只有 2 *,因为在 * 之间的这些空间中,可能会发生另一个 *:

    Pattern.compile(".*\\*.*\\*[0-9]{3}", Pattern.CASE_INSENSITIVE);
    

    所以,这些 .* 可以是任何东西,任何数量的字符,单词等等除了 * 因为我需要确保只有 2 个“*”。

    我该怎么做?

【问题讨论】:

  • [^*] 匹配除 * 字符以外的任何字符。
  • 除了两个 * 和最后三个数字之外,是否必须有其他数字?
  • @TedLyngmo 是的,但它只适用于角色?假设字符串类似于 abc*asd*123,它不会匹配
  • @JavaSamurai 不是,所以它就像:任何东西*任何东西*3_digits

标签: java regex


【解决方案1】:

尝试关注 ^ . * [ * ] { 1 } . * [ * ] { 1 } [ 0 - 9 ] { 3 } $

它确保有两个 * 并以 3 个数字结尾

不得不添加空格,因为它很奇怪。

【讨论】:

    【解决方案2】:

    [^*] 匹配除 * 字符以外的任何字符,因此您可以

    ^(?:[^*]**){2}[^*]*$
    
    • ^ - 行锚开始
    • (?:... ) - 非捕获组
    • [^*]* - 匹配零个或多个非*字符
    • * - 匹配*
    • {2} - 重复两次
    • [^*]* - 以仅匹配非* 字符结束
    • $ - 行尾锚点

    【讨论】:

      猜你喜欢
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 2016-01-16
      • 2016-05-05
      • 1970-01-01
      • 2016-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多