【问题标题】:Java Regexp to Match ASCII CharactersJava 正则表达式匹配 ASCII 字符
【发布时间】:2011-02-21 21:02:36
【问题描述】:

什么正则表达式可以匹配 java 中的任何 ASCII 字符?

我已经试过了:

^[\\p{ASCII}]*$

但发现它与我想要的很多东西(如空格、括号等)都不匹配。我希望避免以如下格式明确列出所有 127 个 ASCII 字符:

^[a-zA-Z0-9!@#$%^*(),.<>~`[]{}\\/+=-\\s]*$

【问题讨论】:

  • 投反对票,因为这个问题并不表明您只需要一个字符(在正文中)还是多个字符(在标题中)。

标签: java regex


【解决方案1】:

第一次尝试几乎是正确的

"^\\p{ASCII}*$"

【讨论】:

  • 虽然我会使用"^\\p{ASCII}+$" 以便与空字符串不匹配,但这可能是哲学上的...... :)
【解决方案2】:

我从未使用过\\p{ASCII},但我使用过^[\\u0000-\\u007F]*$

【讨论】:

  • u 之前真的应该有两个斜线吗?即^[\u0000-\u007F]*$ 不正确吗?
  • 我试过了,单斜线也可以。通常你需要双斜杠,因为它是一个转义命令。顺便说一句,我遇到了字符串问题,因为它有来自扩展 ASCII 的字符,但 \\p{ASCII} 只是标准。对于扩展 ASCII,您可以使用 ^[\\u0000-\\u00FE]*$FE 而不是 7F
  • 为什么是 FE,而不是 FF?
【解决方案3】:

如果您只想要可打印的 ASCII 字符,您可以使用 ^[ -~]*$ - 即空格和波浪号之间的所有字符。

https://en.wikipedia.org/wiki/ASCII#ASCII_printable_code_chart

【讨论】:

    【解决方案4】:

    对于 JavaScript,它将是 /^[\x00-\x7F]*$/.test('blah')

    【讨论】:

      【解决方案5】:

      我认为关于从同时具有 ASCII 和特殊字符的原始字符串中获取 ASCII 字符的问题...

      public String getOnlyASCII(String raw) {
          Pattern asciiPattern = Pattern.compile("\\p{ASCII}*$");
          Matcher matcher = asciiPattern.matcher(raw);
          String asciiString = null;
          if (matcher.find()) {
              asciiString = matcher.group();
          }
          return asciiString;
      }
      

      上述程序将删除非ascii字符串并返回该字符串。感谢@Oleg Pavliv 的模式。

      例如:

      原始 = ��+919986774157

      asciiString = +919986774157

      【讨论】:

        猜你喜欢
        • 2011-01-08
        • 2013-09-22
        • 1970-01-01
        • 1970-01-01
        • 2013-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多