.
.
名称
regexp - 为一个字符串进行正则表达式匹配
语法
regexp ?switches? exp string ?matchVar? ?subMatchVar subMatchVar ...?
描述
如果正则表达式exp匹配上了string的部分或全部后就返回1,否则返回0。(指定了-inline后的情况如下)(正则表达式语法匹配描述在re_syntax中。)
如果指定了string后面的可选变元,那么matchVar将被赋值为于模式匹配的那部分字符串,第一个subMatchVar匹配第一个子模式匹配到的字符串,其它的以此类推。
如果紧接着regexp的第一个变元以-开头,那么就会被当作可选项来处理,可以使用的选项如下:
-
-about
- 不是去匹配正则表达式,而是返回一个包含着正则表达式信息的列表,列表的第一个元素为子表达式的个数,第二个元素为包含正则表达式各类描述信息的列表。这个可选项一般只用来作为调试使用。 -expanded
- 使正则表达式使用扩展语法,空格键和注释会被忽略,与指定了 (?x)嵌入选项相同(参见 re_syntax帮助手册)。 -indices
- 储存在 subMatchVars中的数值不再是子模式匹配的字符串,而是包含两个十进制字符串的列表,分别表示子模式字符串在原字符串中的索引位置。 -line
- 换行符敏感。换行符是字符串的结束符,如果使用了这个标志位, [^和 .不会匹配换行符,如果有换行,那么 ^和 $匹配一个空字符串,这个标志为相当于同时指定了 -linestop和 -lineanchor,与 (?n)嵌入选项相同(参见 re_syntax帮助手册)。 -linestop
- 使 [^和 .不会匹配换行符,与 (?p)嵌入选项相同(参见 re_syntax帮助手册)。 -lineanchor
- 使 ^和 $的行为改变为面向行的方式,与 (?w)嵌入选项相同(参见 re_syntax帮助手册)。 -nocase
- 是大写字母也被当作小写来处理,相当于不区分大小写字符。 -all
- 在字符串中符合使正则表达式的部分全部被匹配,返回匹配的个数,如果指定了匹配变量,那么最后一个匹配到的字符串将储存在这些变量中。 -inline
-
命令返回一个列表,列表元素为匹配的到的字符串和子模式匹配的字符串。如果和
-all一起使用,那么返回所有匹配到的字符串和子模式匹配的字符串。例如:
regexp -inline -- {/w(/w)} " inlined "
-
→ in n regexp -all -inline -- {/w(/w)} " inlined "
-
→ in n li i ne e
-start index
- 指定了开始匹配的索引位置,当使用了这个可选项, ^不会从字符串的开头匹配,而是从指定的索引位置开始匹配。 --
- 指示可选项的结束,这个可选项主要用于 exp以-开头的时候。
如果没有subMatchVars比子模式的数量多或者子模式没有匹配到字符串,相应的subMatchVar将被设为-1,如果指定了-indices将返回一个空字符串。
示例
寻找第一个以foo开头但不是foobar的字符串并且把余下的字符存入一个变量中:
regexp {/<foo(?!bar/>)(/w*)} $string -> restOfWord
注意整个匹配的子字符串已经被放置到变量->中,这样看起来比较好看,因为我们对它的值并没有兴趣。
寻找词badger在字符串中的索引,然后存储在变量location:
regexp -indices {(?i)/<badger/>} $string location
计算字符串中八进制数的个数:
regexp -all {[0-7]} $string
列出字符串中所有的词:
regexp -all -inline {/S+} $string