regexp——用于对字符串进行查找,大小写敏感;
regexpi——用于对字符串进行查找,大小写不敏感;
regexprep——用于对字符串进行查找并替换。
第一部分——单个字符的匹配 1 句点符号 '.' ——匹配任意一个(只有一个)字符(包括空格)。 例如:t.n,它匹配tan、 ten、tin和ton,还匹配t#n、tpn甚至t n Matlab例子程序: clear;clc
str='ten,&8yn2tin6ui>&ton, t n,-356tpn, t#n,4@).,t@nT&nY';
pat='t.n';
[o11,o22,o33]=regexpi(str,pat,'start','end','match');%输出起始位置和子串
匹配结果:
2 方括号符号 '[oum]' ——匹配方括号中的任意一个 例如:t[aeio]n只匹配tan,Ten,tin和toN等。
3 方括号中的连接符 '[c1-c2]' ——匹配从字符c1开始到字符c2结束的字母序列
4 \n 等 ——特殊字符 下面是一些匹配单个字符的转义字符正则表达式及所匹配的值。 \xN或\x{N} 匹配八进制数值为N的字符 \oN或\o{N} 匹配十六进制数值为N的字符 \a Alarm(beep) \b Backspace \t 水平Tab \n New line \v 垂直Tab \f 换页符 \r 回车符 \e Escape \c 某些在正则表达式中有语法功能或特殊意义的字符c,要用\c来匹配,而不能直接用c匹配,如.用正则表达式.匹配,而\用正则表达式\匹配
5 \w,\s和\d——类表达式 和上面的\n等表中的转义字符有所不同,\w,\s,\d等匹配的不是某个特定的字符,而是某一类字符。具体说明如下: \w匹配任意的单个文字字符,相当于[a-zA-Z0-9_]; \s匹配任意的单个空白字符,相当于[\t\f\n\r]; \d匹配任意单个数字,相当于[0-9]; d:digital \S匹配除空白符以外的任意单个字符,相当于[^\t\f\n\r]——方括号中的^表示取反; \W匹配任意单个字符,相当于[^a-zA-Z0-9_]; \D匹配除数字字符外的任意单个字符,相当于[^0-9]。
第二部分串的匹配
1.多次匹配{nstart,nend}
比如,我们要匹配'ppp',那么就可以用正则表达式'ppp',还可以记为'p{3}'。
正则表达式中的'{}'用来表示匹配前面的表达式的出现次数。就是说,'p{2,3}',匹配'pp'和'ppp'。例如:
expr? 与expr匹配的元素出现0或1次,相当于{0,1} expr* 与expr匹配的元素出现1次或更多,相当于{0,} expr+ 与expr匹配的元素出现1次或更多,相当于{1,} expr{n} 与expr匹配的元素出现n次,相当于{n,n} expr{n,} 与expr匹配的元素至少出现n次 expr{n,m} 与expr匹配的元素出现n次但不多于m次
(1)假设匹配号码格式999-99-9999:[0-9]{3}-[0-9]{2}-[0-9]{4} (2)若连字符号可以出现也可以不出现:[0-9]{3}-?[0-9]{2}-?[0-9]{4}
(3)使用expr*时,matlab将尽可能的匹配最长的字符子串。
(4)如果我们希望匹配尽可能短的字符子串时,可以在上面我们使用的字符串后使用'?',也就是expr*?,如:
>> str='<tr valign=top><td><a name="19184"></a>xyz';
regexp(str,'<.*?>','match')
ans =
'<tr valign=top>' '<td>' '<a name="19184">' '</a>'
regexp(str,'<.*>','match')
ans =
'<tr valign=top><td><a name="19184"></a>'
(5)expr*+
先执行expr*,"游标"(如果有的话)就指到了与expr*匹配的字符子串的最末端,然后从那里开始再检查下一个字符与后面的表达式是否匹配,如果匹配就继续向前(如果一直成功则返回最长的字符串),如果不匹配则直接返回空。
2.逻辑运算符
'exp|exp2':或
(expr) 将expr标记为一组、匹配expr,并将匹配的字符子串标记起来以供后面使用。 (?:expr) 说明expr为一组,相当于数学表达式中的() 例如:?lstr='A body or collection of such stories'; ?regexp(lstr,'(?:[^aeiou][aeiou]){2,}','match') ans = 'tori' 上面的表达式中{2,}对[^aeiou][aeiou]起作用,如果去掉分组,则只对[aeiou]起作用,如下所示: ?regexp(lstr,'[^aeiou][aeiou]{2,}','match') ans = 'tio' 'rie' (?>expr) expr中的每个元素是一个分组 (?#expr) expr放在(?#和)之间是就是注释。 ^expr 匹配expr,并且出现在原字符串最前端的子串 expr$ 匹配expr,并且出现在原字符串最末端的子串 <expr 匹配expr,并且出现在一个单词最前端的子串 expr> 匹配expr,并且出现在一个单词最末端的子串 <expr> 更严格的单词匹配,如:以s开头,并且以h结尾的单词 ?regexpi(hstr, '<s\w*h>', 'match') ans = 'such' 3. 左顾右盼——利用上下文匹配 这个也比较容易理解。就是利用上下文的匹配来找到我们要找的内容。 expr1(?=expr2) 找到匹配expr1的子串,如果其后的字符串也匹配expr2 如,下面的例子查找所有在','之前的单词。 ? pstr = ['While I nodded, nearly napping, ' … 'suddenly there came a tapping,']; ?regexpi(pstr, '\w*(?=,)', 'match') ans = 'nodded' 'napping' 'tapping' expr1(?!expr2) 找到匹配expr1的子串如果其后的字符串不匹配expr2 下面的例子匹配所有不在','之前的单词 ?regexpi(pstr, '\w*+(?!,)', 'match') ans = Columns 1 through 6 'While' 'I' 'nearly' 'suddenly' 'there' 'came' Column 7 'a' (?<=expr1)expr2 找到匹配expr2的子串,如果其前面的字符串也匹配expr1 下面的例子查找所有在','之后的单词,注意:','之后可能有空格 ?regexpi(pstr,'(?<=,\s*)\w*','match') ans = 'nearly' 'suddenly' (?<!expr1)expr2 找到匹配expr2的子串,如果其后的字符串不匹配expr1 下面的例子查找所有不在','之后的单词, ?regexpi(pstr,'(?<!,\s*)\w*','match') ans = Columns 1 through 6 'While' 'I' 'nodded' 'early' 'napping' 'uddenly' Columns 7 through 10 'there' 'came' 'a' 'tapping'
来源:https://blog.csdn.net/yf210yf/article/details/42421523
第三部分
tline= '530414.360 3390859.100 24.480 2719';
lineData = regexp(tline, strcat('\',divisionType,'+'), 'split');%使用'split'关键字在空格处拆分字符,空格可以是一个或者多个空格
|
请发表评论