3 回答
TA贡献2051条经验 获得超10个赞
源代码
Java 7中的更新
Pattern
UNICODE_CHARACTER_CLASS
(?U)
String
Java的Regex Unicode问题
\w
, \b
, \s
, \d
\b
\w
POSIX syntax Java syntax[[:Lower:]] \p{Lower}[[:Upper:]] \p{Upper}[[:ASCII:]] \p{ASCII}[[:Alpha:]] \p{Alpha}[[:Digit:]] \p{Digit}[[:Alnum:]] \p{Alnum}[[:Punct:]] \p{Punct}[[:Graph:]] \p{Graph}[[:Print:]] \p{Print}[[:Blank:]] \p{Blank}[[:Cntrl:]] \p{Cntrl}[[:XDigit:]] \p{XDigit}[[:Space:]] \p{Space}
Alpha
, Lower
Space
Alphabetic
, Lowercase
Whitespace
Regex 001A 0085 00A0 2029 J P J P J P J P \s 1 1 0 1 0 1 0 1 \pZ 0 0 0 0 1 1 1 1 \p{Zs} 0 0 0 0 1 1 0 0 \p{Space} 1 1 0 1 0 1 0 1 \p{Blank} 0 0 0 0 0 1 0 0 \p{Whitespace} - 1 - 1 - 1 - 1\p{javaWhitespace} 1 - 0 - 0 - 1 - \p{javaSpaceChar} 0 - 0 - 1 - 1 -
解决所有这些问题,还有更多
\w \W \s \S \v \V \h \H \d \D \b \B \X \R
\s => [\u0009-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]\S => [^\u0009-\u000D\u0020\u0085\u00A0\u1680\u180E\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]\v => [\u000A-\u000D\u0085\u2028\u2029]\V => [^\u000A-\u000D\u0085\u2028\u2029]\h => [\u0009\u0020\u00A0\u1680\u180E\u2000-\u200A\u202F\u205F\u3000]\H => [^\u0009\u0020\u00A0\u1680\u180E\u2000\u2001-\u200A\u202F\u205F\u3000]\w => [\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]]\W => [^\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]]\b => (?:(?<=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]]))\B => (?:(?<=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])(?=[\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])|(?<![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]])(?![\pL\pM\p{Nd}\p{Nl}\p{Pc}[\p{InEnclosedAlphanumerics}&&\p{So}]]))\d => \p{Nd}\D => \P{Nd}\R => (?:(?>\u000D\u000A)|[\u000A\u000B\u000C\u000D\u0085\u2028\u2029])\X => (?>\PM\pM*)
用于 \X
定义什么 Unicode现在指的是 作为 遗留字形聚类,而不是 扩展字形簇,因为后者更复杂。Perl本身现在使用更高级的版本,但在最常见的情况下,旧版本仍然是完全可行的。 编辑:见下文增编。 该怎么办 \d
取决于您的意图,但默认的是Uniode定义。我可以看到人们并不总是想要 \p{Nd}
,但有时 [0-9]
或 \pN
.两个边界定义, \b
和 \B
,则是专门编写的,以便使用 \w
定义。 那,那个 \w
定义过于宽泛,因为它抓住了括号内的字母,而不仅仅是圆圈字母。Unicode Other_Alphabetic
属性在JDK 7之前是不可用的,所以这是您所能做的最好的。
探索边界
\b
\B
\b
\B
他们是 只看过
为 \w
字, 绝不可能
非文字字符。 它们不专门寻找字符串的边缘。
A \b
IF does follow word THEN doesn't precede word ELSIF doesn't follow word THEN does precede word
跟随词
是 (?<=\w)
.先于文字
是 (?=\w)
.不听我的话
是 (?<!\w)
.不先于单词
是 (?!\w)
.
IF-THEN
and
AB
or
X|Y
and
or
AB|CD
\b
(?:(?<=\w)(?!\w)|(?<!\w)(?=\w))
\w
A
C
AB|D
\B
IF does follow word THEN does precede word ELSIF doesn't follow word THEN doesn't precede word
\B
(?:(?<=\w)(?=\w)|(?<!\w)(?!\w))
\b
\B
\b
使用 ((IF)THEN|ELSE)
构造是 (?(?<=\w)(?!\w)|(?=\w))
\B
使用 ((IF)THEN|ELSE)
构造是 (?(?=\w)(?<=\w)|(?<!\w))
AB|CD
0 .. 7F the ASCII range 80 .. FF the non-ASCII Latin1 range 100 .. FFFF the non-Latin1 BMP (Basic Multilingual Plane) range 10000 .. 10FFFF the non-BMP portion of Unicode (the "astral" planes)
左缘
如 (?:(?<=^)|(?<=\s))
右缘
如 (?=$|\s)
用Java修复Java
switch (code_point) { case 'b': newstr.append(boundary); break; /* switch */ case 'B': newstr.append(not_boundary); break; /* switch */ case 'd': newstr.append(digits_charclass); break; /* switch */ case 'D': newstr.append(not_digits_charclass); break; /* switch */ case 'h': newstr.append(horizontal_whitespace_charclass); break; /* switch */ case 'H': newstr.append(not_horizontal_whitespace_charclass); break; /* switch */ case 'v': newstr.append(vertical_whitespace_charclass); break; /* switch */ case 'V': newstr.append(not_vertical_whitespace_charclass); break; /* switch */ case 'R': newstr.append(linebreak); break; /* switch */ case 's': newstr.append(whitespace_charclass); break; /* switch */ case 'S': newstr.append(not_whitespace_charclass); break; /* switch */ case 'w': newstr.append(identifier_charclass); break; /* switch */ case 'W': newstr.append(not_identifier_charclass); break; /* switch */ case 'X': newstr.append(legacy_grapheme_cluster); break; /* switch */ default: newstr.append('\\'); newstr.append(Character.toChars(code_point)); break; /* switch */}saw_backslash = false;
将代码复制折叠在一起 提供关于未转义字符串转义与增强regex转义的更清晰的接口。 在 \d
扩张,也许 \b
为您提供方便的方法来处理转身和调用Pattern.L.6或String.Match或诸如此类的事情
增编
\X
.
(?:(?:\u000D\u000A)|(?:[\u0E40\u0E41\u0E42\u0E43\u0E44\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\uAAB5\uAAB6\uAAB9\uAABB\uAABC]*(?:[\u1100-\u115F\uA960-\uA97C]+|([\u1100-\u115F\uA960-\uA97C]*((?:[[\u1160-\u11A2\uD7B0-\uD7C6][\uAC00\uAC1C\uAC38]][\u1160-\u11A2\uD7B0-\uD7C6]*|[\uAC01\uAC02\uAC03\uAC04])[\u11A8-\u11F9\uD7CB-\uD7FB]*))|[\u11A8-\u11F9\uD7CB-\uD7FB]+|[^[\p{Zl}\p{Zp}\p{Cc}\p{Cf}&&[^\u000D\u000A\u200C\u200D]]\u000D\u000A])[[\p{Mn}\p{Me}\u200C\u200D\u0488\u0489\u20DD\u20DE\u20DF\u20E0\u20E2\u20E3\u20E4\uA670\uA671\uA672\uFF9E\uFF9F][\p{Mc}\u0E30\u0E32\u0E33\u0E45\u0EB0\u0EB2\u0EB3]]*)|(?s:.))
String extended_grapheme_cluster = "(?:(?:\\u000D\\u000A)|(?:[\\u0E40\\u0E41\\u0E42\\u0E43\\u0E44\\u0EC0\\u0EC1\\u0EC2\\u0EC3\\u0EC4\\uAAB5\\uAAB6\\uAAB9\\uAABB\\uAABC]*(?:[\\u1100-\\u115F\\uA960-\\uA97C]+|([\\u1100-\\u115F\\uA960-\\uA97C]*((?:[[\\u1160-\\u11A2\\uD7B0-\\uD7C6][\\uAC00\\uAC1C\\uAC38]][\\u1160-\\u11A2\\uD7B0-\\uD7C6]*|[\\uAC01\\uAC02\\uAC03\\uAC04])[\\u11A8-\\u11F9\\uD7CB-\\uD7FB]*))|[\\u11A8-\\u11F9\\uD7CB-\\uD7FB]+|[^[\\p{Zl}\\p{Zp}\\p{Cc}\\p{Cf}&&[^\\u000D\\u000A\\u200C\\u200D]]\\u000D\\u000A])[[\\p{Mn}\\p{Me}\\u200C\\u200D\\u0488\\u0489\\u20DD\\u20DE\\u20DF\\u20E0\\u20E2\\u20E3\\u20E4\\uA670\\uA671\\uA672\\uFF9E\\uFF9F][\\p{Mc}\\u0E30\\u0E32\\u0E33\\u0E45\\u0EB0\\u0EB2\\u0EB3]]*)|(?s:.))";
TA贡献1811条经验 获得超5个赞
\w
\p{Alpha}
[\p{L}]
\w
[\p{L}\p{Digit}_]
.
添加回答
举报