qt中的正则表达式QRegExp使用以及匹配中括号[]方法
发布时间:2020-12-14 00:40:04 所属栏目:百科 来源:网络整理
导读:Qt的SDK里包含一个很帮的GUI工具,可以方便我们进行这类转换并测试你的表达式。可以按照如下的方式打开:“开始”-“程序”-“Qt SDK by Nokia v2010.02.1 (open source)”-“QtDemo”-“Tools”-“RegularExpression”可以选择“launch”启动程序,亦可以“
QRegExp::QRegExp ( const QRegExp &rx)//建立一个正则表达式,该表达式是rx的复制版
如程序中建立的匹配节点重启的正则表达式QRegExp regexp("TaskCTLL");就是以TaskCTLL为表达式进行匹配。
QRegExp::QRegExp ( constQString&pattern,Qt::CaseSensitivitycs= Qt::CaseSensitive,PatternSyntaxsyntax= RegExp )//根据给定的模式串(pattern string)建立正则表达式对象,模式串必须以通配符(wildcard)的形式给出
如程序中建立的匹配第一父节点的饿正则表达式QRegExp regexpparent("parent[0]s+-{0,1}(d+)b");
int QRegExp::indexIn ( constQString&str,intoffset= 0,CaretModecaretMode= CaretAtZero ) const//企图从位置偏移为零(默认值)出找到一个匹配的字符处str,返回第一个匹配点的位置position,如果没有匹配则返回-1
程序中只需要匹配一次(文本文件中每一行只有一个不重复的str),只要匹配成功返回值不是-1,就对信息进行提取保存
Qt里的正则表达式和C++里面的有些差别,例如
.表示
. d表示d
程序实例:
匹配时钟跳变
2011/06/27 22:05:42.011 parent[1] -1
2011/06/27 22:05:42.011 Local time 2d5820d
":(d+).(d+)s+(w*s*w*s*d*,s*)*(w*s*)*(parent[[01]]s+-{0,1}d+)*(w*d*.d*w*s*d*)*Locals+time"
匹配第一父节点
2011/06/27 22:05:42.011 parent[0] 6003
"parent[0]s+-{0,1}(d+)b"
匹配节点号
2011/06/27 22:26:30.090 mac neigh 0,addr 100
"macs+neighs+0,s+addrs+(d+)b"
根节点收到数据
2011/06/27 22:07:45.058 ROOT receive data origin 52 100
"ROOTs+receives+dadas+origins+(d+)s+(d+)b"
常用正则表达式
如: baw*b :匹配以字母a开头的单词——先是某个单词开始处(b),然后是字母a,然后是任意数量的字母或数字(w*),最后是单词结束处(b)。 d+ :匹配1个或更多连续的数字。这里的+是和*类似的元字符,不同的是*匹配重复任意次(可能是0次),而+则匹配重复1次或更多次。 bw{6}b: 匹配刚好6个字符的单词。
[ab5@]: 匹配 "a" 或 "b" 或 "5" 或 "@" [^abc]: 包含abc之外的任意字符 [f-k]: f-k之间的任意字符
备注:
在正则表达式中,前中括号 [ 属于特殊字符,要匹配它,需要转义,即加上 ;而后中括号 ] 不属于特殊字符,不必加转义字符。
var pattern =
"([{1})"
;
// 错误,正确应该为:([[]{1})
var flag =
"gi"
;
var reg =
new
RegExp(pattern,flag);
reg.exec(
"<>[]"
);
alert(RegExp.$1);
以上代码是不正确的,错误在 pattern,应该写作 ([[]{1})。即:对于前中括号 [,除了转义字符,还应该用中括号括起来。
似乎不稀奇,稀奇在对后括号 ] 的处理上。
"([]]{1})"
// 错误,正确应该为:(]{1})
;
);
alert(RegExp.$1);
以上代码在 IE 中是正确的,但在 Chrome 中,它确得不到我们想要的结果,错误同样在 pattern,应该写作 (]{1})。即:对于后中括号 ],应该直接写,既不能用转义字符,也不能用中括号括起来。
资料:正则表达式中的特殊字符(需要转义)
^ 匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 ^。
$ 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配
'n'
或
'r'
。要匹配 $ 字符本身,请使用 $。
. 匹配除换行符 n 之外的任何单字符。要匹配 .,请使用 。
将下一个字符标记为或特殊字符、或原义字符、或后向引用、或八进制转义符。例如,
'n'
匹配字符
。
匹配换行符。序列
''
匹配
"",而 '(' 则匹配 "
("。
| 指明两项之间的一个选择。要匹配 |,请使用 |。
{ 标记限定符表达式的开始。要匹配 {,请使用 {。
[ 标记一个中括号表达式的开始。要匹配 [,请使用 [。
( 和 ) 标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。
* 匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。
+ 匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。
? 匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 ?。
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容