BOW*_*OWS 0 java regex string unicode character-properties
我有一个任意长度的Type String列表,我需要确保列表中的每个String元素是字母数字或数字,没有空格和特殊字符,如- \ / _等.
接受的字符串示例包括:
J0hn-132ss/sda
Hdka349040r38yd
Hd(ersd)3r4y743-2\d3
123456789
Run Code Online (Sandbox Code Playgroud)
不可接受的字符串示例包括:
Hello
Joe
King
Run Code Online (Sandbox Code Playgroud)
等等基本上没有话语.
我目前正在使用stringInstance.matches("regex")但不太确定如何编写适当的表达式
if (str.matches("^[a-zA-Z0-9_/-\\|]*$")) return true;
else return false;
Run Code Online (Sandbox Code Playgroud)
true对于不符合我提到的格式的单词,此方法将始终返回.
我正在用英语寻找的正则表达式的描述类似于:
任何字符串,其中字符串包含来自(a-zA-Z和0-9 AND特殊字符)
或(0-9 AND特殊字符)的字符
或者(0-9)
编辑:我已经提出了下面的表达方式,但是我认为它可能很糟糕,因为它不清楚或复杂.
表达方式:
(([\\pL\\pN\\pP]+[\\pN]+|[\\pN]+[\\pL\\pN\\pP]+)|([\\pN]+[\\pP]*)|([\\pN]+))+
Run Code Online (Sandbox Code Playgroud)
我用过这个网站来帮助我:http ://xenon.stanford.edu/~xusch/regexp/analyzer.html
请注意我还是新手的正则表达式
tch*_*ist 11
像范围的所有实例A-Z或0-9一个RFC定义之外发生的几乎总是依据事实错误的统一.特别是,像是可怕的反模式这样[A-Za-z]的东西:他们肯定会给程序员一个关于文本的穴居人心态,这几乎完全不适合千禧年这一方面.Unicode模式适用于ASCII,但ASCII模式在Uniocode上中断,有时会让您对安全性违规行为开放.无论您使用的是20世纪70年代的数据还是使用现代的Unicode,都要编写模式的Unicode版本,因为这样您实际使用真正的Java字符数据时就不会搞砸了.这就像你使用转向信号的方式,即使你"知道"你身后没有人,因为如果你错了,你没有伤害,而另一方面,你肯定会这样做.习惯使用7种Unicode类别:
\pL信件.注意\pL键入的时间要短得多[A-Za-z].\pN 对于数字.\pM 对于与其他代码点组合的Marks.\pS符号,符号和印记.:)\pP 标点符号.\pZ对于像空格这样的分隔符(但不是控制字符)\pC 用于其他不可见的格式和控制字符,包括未分配的代码点.如果你只是想要一个模式,你想要的
^[\pL\pN]+$
Run Code Online (Sandbox Code Playgroud)
虽然在Java 7中你可以这样做:
(?U)^\w+$
Run Code Online (Sandbox Code Playgroud)
假设您不介意带有任意组合标记的下划线和字母.否则你必须写得很尴尬:
(?U)^[[:alpha:]\pN]+$
Run Code Online (Sandbox Code Playgroud)
它(?U)是Java 7的新手.它对应于Pattern类的UNICODE_CHARACTER_CLASSES编译标志.它切换POSIX字符类[:alpha:]和简单的快捷方式,就像\w实际使用完整的Java字符集一样.通常,它们仅适用于1970年代的ASCII集,这可能是一个安全漏洞.
没有办法让Java 7总是在没有被告知的情况下使用它的模式执行此操作,但是您可以编写一个前端函数来为您执行此操作.你只需要记得给你打电话.
请注意,v1.7之前的Java模式无法按照Unicode正则表达式上的UTS#18所说的方式工作.因此,如果不使用新的Unicode标志,就会对各种错误,缺陷和悖论敞开大门.例如,\b\w+\b将找不到普通模式和普通模式以匹配字符串中的任何位置"élève",更不用说完整.
因此,如果您在1.7之前的Java中使用模式,则需要非常小心,比以往任何时候都要小心得多.你不能使用任何的POSIX charclasses或charclass将快捷键,其中包括\w,\s,和\b,所有这些对任何东西,但石器时代的ASCII数据打破.它们不能用于Java的本机字符集.
在Java 7中,它们可以 - 但只能使用正确的标志.
| 归档时间: |
|
| 查看次数: |
1178 次 |
| 最近记录: |