正则表达式中的“ \\ p {all}”是什么意思?

时间:2018-07-12 08:55:05

标签: java regex

我正在处理一些具有以下语句的Java代码:

if (sql1.matches("(?i)^CREATE\\s+TABLE\\p{all}*")) {
     // do something;
}

我已经搜索了正则表达式语法,但是找不到使用\\p{all}的规则。那么这个表达是什么意思?

2 个答案:

答案 0 :(得分:3)

将Unicode all类别“手动”添加到类别列表中,以匹配任何字符,包括换行符等。

请参见Java regex source code

map.put("all", new CharPropertyFactory() {
                CharProperty make() { return new All(); }});

然后是this part

/**
 * Implements the Unicode category ALL and the dot metacharacter when
 * in dotall mode.
 */
static final class All extends CharProperty {
    boolean isSatisfiedBy(int ch) {
        return true;
    }
}

All()用于以.模式实例化DOTALL,请参见this part

case '.':
    next();
    if (has(DOTALL)) {
        node = new All();
    } ....

答案 1 :(得分:0)

Java中的

\p{all}是Perl中常规类别\p{Any}的同义词,表示:

  

所有Unicode代码点[\x{0000}-\x{10FFFF}]。

它可以与\X(匹配Unicode“扩展字素簇”)或(?s:.)一起使用。

下图来自Jeffrey E.F. Friedl的Mastering Regular Expressions:

enter image description here

Perl中还存在一个All属性,该属性具有更广泛的定义:

  

所有代码点,包括Unicode以上的代码点。