3 回答
TA贡献2051条经验 获得超10个赞
源代码
Java 7中的更新
PatternUNICODE_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, LowerSpaceAlphabetic, LowercaseWhitespace
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-THENandABorX|YandorAB|CD\b
(?:(?<=\w)(?!\w)|(?<!\w)(?=\w))
\w
ACAB|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}_].
添加回答
举报
