Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 所有可打印字符的正则表达式_.net_Regex - Fatal编程技术网

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

.net 所有可打印字符的正则表达式,.net,regex,.net,Regex,是否有一个特殊的正则表达式语句,如\w,表示所有可打印字符?我想验证字符串是否只包含可以打印的字符,即不包含\b(bell)或null等ASCII控制字符。键盘上的任何内容都可以,UTF字符也可以 如果没有特殊语句,如何在正则表达式中指定它?有一个POSIX字符类名称[:print://code>,它应该与可打印字符匹配,而控制字符则为[:cntrl:。请注意,这些代码在整个ASCII表中都匹配,因此它们可能不适合匹配其他编码 否则,表达式[\x00-\x1f]将通过ASCII控制字符匹配,尽管

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


如果没有特殊语句,如何在正则表达式中指定它?

有一个POSIX字符类名称
[:print://code>,它应该与可打印字符匹配,而控制字符则为
[:cntrl:
。请注意,这些代码在整个ASCII表中都匹配,因此它们可能不适合匹配其他编码


否则,表达式
[\x00-\x1f]
将通过ASCII控制字符匹配,尽管这些字符同样可以在其他编码中打印。

这完全取决于您使用的正则表达式包。这就是其中一种情况,一些wag说,标准的伟大之处在于有太多的选择


如果您碰巧使用C,则您可以使用
isprint(3)
函数/宏。

在Java中,指定
\p{Print}
选项。

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

\P{Cc}
匹配任何非控制字符的字符,无论它是ASCII--
[\x00-\x1F\x7F]
--还是拉丁文--
[\x80-\x9F]
(也称为C1控制字符)


POSIX类如
[:print://code>或
\p{print}
的问题在于,它们可以根据正则表达式的风格以及底层平台的语言环境设置匹配不同的内容。在Java中,它们是严格面向ASCII的。这意味着
\p{Print}
只匹配ASCII打印字符--
[\x20-\x7E]
--而
\p{Cntrl}
(注意大写字母“p”)匹配所有非ASCII控制字符--
[^\x00-\x1F\x7F]
。也就是说,它匹配任何非控制字符的ASCII字符,或任何非ASCII字符,包括C1控制字符。

很晚才加入,但这个regexp有效:
/[-~]/

怎么做?它匹配从空格(ASCII
DEC
32)到波浪号(ASCII
DEC
126)范围内的所有字符,波浪号是所有可打印字符的范围

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

$someString.replace(/[^ -~]/g, '');

注意:这不是有效的
.net
代码,但对于那些后来通过搜索引擎偶然发现这一点的人来说,这是一个使用regexp的示例。

添加到@Alan Moore上,
\p{Cc}
实际上是
负Unicode类别或Unicode块的示例(参考:)
\P{name}
匹配任何不属于Unicode常规类别或命名块的字符。有关.Net中支持的命名块的更多示例,请参见参考链接 使用这个正则表达式

\P{Cc}\P{Cn}\P{Cs}
TLDR解释
  • \P{Cc}
    :与控制字符不匹配
  • \P{Cn}
    :不匹配未分配的字符
  • \P{Cs}
    :与UTF-8无效字符不匹配
选择
  • \P{C}
    :仅匹配可见字符。不匹配任何不可见字符
  • \P{Cc}
    :仅匹配非控制字符。不匹配任何控制字符
  • \P{Cc}\P{Cn}
    :仅匹配已分配的非控制字符。不匹配任何控件或未分配的字符
  • \P{Cc}\P{Cn}\P{Cs}
    :仅匹配已分配且UTF-8有效的非控制字符。不匹配任何控件、未分配或UTF-8无效字符
  • \P{Cc}\P{Cn}\P{Cs}\P{Cf}
    :仅匹配已分配且UTF-8有效的非控制、非格式字符。不匹配任何控件、未分配、格式或UTF-8无效字符
来源和解释 查看可用于在正则表达式中进行测试的可用数据。您应该能够在、、、甚至中使用这些正则表达式。了解Unicode字符类是一门非常容易传授的知识,所以我建议使用它

这个正则表达式将匹配任何可见的东西,包括它的短手和长手形式

\p{L}\p{M}\p{N}\p{P}\p{S}\p{Z}
\p{Letter}\p{Mark}\p{Number}\p{Punctuation}\p{Symbol}\p{Separator}
\p
表明它是我们想要匹配的,但是我们也可以选择使用
\p
(大写),这意味着我们可以使用
\p{C}
类,用于“不可见的控制字符和未使用的代码点”。(来源:)一个更简单的正则表达式是
\p{C}
,但这在删除不可见的格式时可能限制太多。你可能想仔细观察,看看什么是最好的,但其中一个选择应该适合你的需要

所有可匹配的Unicode字符集 如果您想知道任何其他可用的字符集,请查看

  • \p{L}
    \p{Letter}
    :任何语言的任何种类的字母。
    • \p{Ll}
      \p{Lowercase_Letter}
      :具有大写变体的小写字母
    • \p{Lu}
      \p{Uppercase\u Letter}
      :具有小写变体的大写字母
    • \p{Lt}
      \p{Titlecase\u Letter}
      :仅当单词的第一个字母大写时出现在单词开头的字母
    • \p{L&}
      \p{Cased_Letter}
      :存在于小写和大写变体(Ll、Lu和Lt的组合)中的字母
    • \p{Lm}
      \p{Modifier\u Letter}
      :一种像字母一样使用的特殊字符
    • \p{Lo}
      \p{Other_Letter}
      :没有小写和大写字母的字母或表意文字
  • \p{M}