所有可打印字符的正则表达式

13 .net regex

是否有一个特殊的正则表达式语句,如\ w表示所有可打印的字符?我想验证一个字符串只包含一个可以打印的字符 - 即不包含ASCII控制字符,如\ b(bell),或null等.键盘上的任何东西都可以,UTF字符也是如此.

如果没有特殊声明,我如何在正则表达式中指定它?

Arm*_*n H 18

聚会很晚,但这个正则表达式有效:/[ -~]/.

怎么样?它匹配从空格(ASCII DEC32)到波形符(ASCII DEC126)范围内的所有字符,这是所有可打印字符的范围.

如果要删除非ASCII字符,可以使用以下内容:

$someString.replace(/[^ -~]/g, '');
Run Code Online (Sandbox Code Playgroud)

注意:这不是有效的.net代码,而是后来通过搜索引擎偶然发现这一点的人的正则表达式使用示例.


Ala*_*ore 16

如果你的正则表达式支持Unicode属性,这可能是最好的方法:

\P{Cc}
Run Code Online (Sandbox Code Playgroud)

这匹配任何不是控制字符的字符,无论是ASCII [\x00-\x1F\x7F]- 还是Latin1 - [\x80-\x9F](也称为C1控制字符).

POSIX类的问题是,[:print:]或者\p{Print}它们可以根据正则表达式的风格以及可能的底层平台的区域设置来匹配不同的东西.在Java中,它们严格地面向ASCII.这意味着\p{Print}只匹配ASCII打印字符 - [\x20-\x7E]\P{Cntrl}(注意大写'P')匹配所有不是 ASCII控制字符的东西 - [^\x00-\x1F\x7F].也就是说,它匹配任何非控制字符的ASCII字符任何非ASCII字符 - 包括C1控制字符.


zom*_*bat 8

有一个POSIX字符类标识[:print:]应该匹配可打印字符和[:cntrl:]控制字符.请注意,这些匹配代码贯穿整个ASCII表,因此它们可能不适合匹配其他编码.

如果失败,表达式[\x00-\x1f]将通过ASCII控制字符匹配,尽管这些字符可以在其他编码中打印.


Hol*_*ger 6

TLDR Answer

Use this Regex...

\P{Cc}\P{Cn}\P{Cs}
Run Code Online (Sandbox Code Playgroud)

Working Demo

In this demo, I use this regex to search the string "Hello, World!_". I'm going to add a weird character at the end, (char)4 — this is the character for END TRANSMISSION.

using System;
using System.Text.RegularExpressions;

public class Test {
    public static void Main() {
        // your code goes here
        var regex = new Regex(@"![\P{Cc}\P{Cn}\P{Cs}]");
        var matches = regex.Matches("Hello, World!" + (char)4);
        Console.WriteLine("Results: " + matches.Count);
        foreach (Match match in matches) {
            Console.WriteLine("Result: " + match);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Full Working Demo at IDEOne.com

TLDR Explanation

  • \P{Cc} : Do not match control characters.
  • \P{Cn} : Do not match unassigned characters.
  • \P{Cs} : Do not match UTF-8-invalid characters.

Alternatives

  • \P{C} : Match only visible characters. Do not match any invisible characters.
  • \P{Cc} : Match only non-control characters. Do not match any control characters.
  • \P{Cc}\P{Cn} : Match only non-control characters that have been assigned. Do not match any control or unassigned characters.
  • \P{Cc}\P{Cn}\P{Cs} : Match only non-control characters that have been assigned and are UTF-8 valid. Do not match any control, unassigned, or UTF-8-invalid characters.
  • \P{Cc}\P{Cn}\P{Cs}\P{Cf} : Match only non-control, non-formatting characters that have been assigned and are UTF-8 valid. Do not match any control, unassigned, formatting, or UTF-8-invalid characters.

Source and Explanation

Take a look at the Unicode Character Properties available that can be used to test within a regex. You should be able to use these regexes in Microsoft .NET, JavaScript, Python, Java, PHP, Ruby, Perl, Golang, and even Adobe. Knowing Unicode character classes is very transferable knowledge, so I recommend using it!

All Matchable Unicode Character Sets

If you want to know any other character sets available, check out regular-expressions.info...

  • \p{L} or \p{Letter}: any kind of letter from any language.
    • \p{Ll} or \p{Lowercase_Letter}: a lowercase letter that has an uppercase variant.
    • \p{Lu} or \p{Uppercase_Letter}: an uppercase letter that has a lowercase variant.
    • \p{Lt} or \p{Titlecase_Letter}: a letter that appears at the start of a word when only the first letter of the word is capitalized.
    • \p{L&} or \p{Cased_Letter}: a letter that exists in lowercase and uppercase variants (combination of Ll, Lu and Lt).
    • \p{Lm} or \p{Modifier_Letter}: a special character that is used like a letter.
    • \p{Lo} or \p{Other_Letter}: a letter or ideograph that does not have lowercase and uppercase
  • \p{M} or \p{Mark}: a character intended to be combined with another character (e.g. accents, umlauts, enclosing boxes, etc.).
    • \p{Mn} or \p{Non_Spacing_Mark}: a character intended to be combined with another character without taking up extra space (e.g. accents, umlauts, etc.).
    • \p{Mc} or \p{Spacing_Combining_Mark}: a character intended to be combined with another character that takes up extra space (vowel signs in many Eastern languages).
    • \p{Me} or \p{Enclosing_Mark}: a character that encloses the character it is combined with (circle, square, keycap, etc.).
  • \p{Z} or \p{Separator}: any kind of whitespace or invisible separator.
    • \p{Zs} or \p{Space_Separator}: a whitespace character that is invisible, but does take up space.
    • \p{Zl} or \p{Line_Separator}: line separator character U+2028.
    • \p{Zp} or \p{Paragraph_Separator}: paragraph separator character U+2029.
  • \p{S} or \p{Symbol}: math symbols, currency signs, dingbats, box-drawing characters, etc.
    • \p{Sm} or \p{Math_Symbol}: any mathematical symbol.
    • \p{Sc} or \p{Currency_Symbol}: any currency sign.
    • \p{Sk} or \p{Modifier_Symbol}: a combining character (mark) as a full character on its own.
    • \p{So} or \p{Other_Symbol}: various symbols that are not math symbols, currency signs, or combining characters.
  • \p{N} or \p{Number}: any kind of numeric character in any script.
    • \p{Nd} or \p{Decimal_Digit_Number}: a digit zero through nine in any script except ideographic scripts.
    • \p{Nl} or \p{Letter_Number}: a number that looks like a letter, such as a Roman numeral.
    • \p{No} or \p{Other_Number}: a superscript or subscript digit, or a number that is not a digit 0–9 (excluding numbers from ideographic scripts).
  • \p{P} or \p{Punctuation}: any kind of punctuation character.
    • \p{Pd} or \p{Dash_Punctuation}: any kind of hyphen or dash.
    • \p{Ps} or \p{Open_Punctuation}: any kind of opening bracket.
    • \p{Pe} or \p{Close_Punctuation}: any kind of closing bracket.
    • \p{Pi} or \p{Initial_Punctuation}: any kind of opening quote.
    • \p{Pf} or \p{Final_Punctuation}: any kind of closing quote.
    • \p{Pc}\p{Connector_Punctuation}: 一个标点符号,例如连接单词的下划线。
    • \p{Po}\p{Other_Punctuation}:任何类型的标点符号,不是破折号、括号、引号或连接符。
  • \p{C}\p{Other}: 不可见的控制字符和未使用的代码点。
    • \p{Cc}\p{Control}:ASCII 或 Latin-1 控制字符:0x00–0x1F 和 0x7F–0x9F。
    • \p{Cf}\p{Format}: 不可见的格式指示符。
    • \p{Co}\p{Private_Use}:保留供私人使用的任何代码点。
    • \p{Cs}\p{Surrogate}:UTF-16 编码的代理对的一半。
    • \p{Cn}\p{Unassigned}:任何未分配字符的代码点。