反斜线(元字符之一)
因为元字符是特殊字符,正常使用时不会被作为普通字符用来搜索,而是使用其特殊含义,比如一对方括号表示字符集合。但是如果想对元字符本身进行搜索,就需要转义。比如
> (regex "\\[text\\]" "ab[text]cd") ("[text]" 2 6)因为想要匹配的是[text]子串,所以前面用反斜线转义,在newlisp的regex规则中,双引号内必须用\\来表示反斜线。
同样,由于pcre定义了一些字符类别,都是用\引导,比如\d 表示查找数字字符,在双引号中也需要写成\\d
> (regex "\\d{1,3}" "qwerty5679asdfg") ("567" 6 3)如果在双引号里面包含一个"字符,需要用单个反斜线引导,写成:\",这是newlisp的特殊规则。
> (regex "\"" "abc\"def") ("\"" 3 1)
花括号(元字符之一)
pcre中成对的的{}里面包含了两个数字,一个代表出现的最少次数,一个代表最多次数。当然后一个参数可以没有,代表精确匹配,所以
{n} 代表n此精确匹配
{n,} 代表>= n次的匹配
不过regex也可以用{ } 来包含一个search pattern,下面这个例子不再用双引号了。
> (regex {\(abc\)} "xyz(abc)xyz") ("(abc)" 3 5)此时,{ } 内部的双引号不需要转义,直接用
> (regex {"} "abc\"def") ("\"" 3 1)
因此推荐使用{},可以少写一个\,
因此如果在双引号里面表示将元字符作为普通字符使用,需要\\前缀,而在{}里面只需要一个\即可。下面是例子:
> (directory "/home/dean/Downloads/x" {\.$}) ("." "..")
> (directory "/home/dean/Downloads/x" "\\.$") ("." "..")
[text] [/text]也和{ } 有相同的功能,不过打字太多,不推荐。