零宽断言用于查找指定内容之前或之后的内容,不包括指定内容。有两种类型,即
零宽度正预测先行断言:表达式为(?=exp),查找exp表示的内容之前的内容。
零宽度正回顾后发断言:表达式为(?<=exp),查找exp表示的内容之后的内容。
组合上面两种情况,可以查找指定内容之间的内容。
下面给定原始字符串,要求提取出单位公斤前面的数字,只提取数字。使用零宽度正预测先行断言进行提取。
code.matlab
>> a='10公斤 20公斤 30公斤';
>> m=regexp(a,'\d+(?=公斤)','match') %只取单位之前的数字
m =
1×3 cell 数组
{'10'} {'20'} {'30'}
正则表达式r'\d+(?=公斤)'表示匹配'公斤'前面的数字,不包括'公斤'。结果显示匹配正确。
下面给定原始字符串,要求提取出'同学'、'战友'、'师兄'等称谓后面的姓名。使用零宽度正回顾后发断言进行提取。
code.matlab
>> a='同学李海 战友王刚 师兄张三';
>> m=regexp(a,'(?<=同学|战友|师兄)\w+','match') %只取称呼后面的姓名
m =
1×3 cell 数组
{'李海'} {'王刚'} {'张三'}
正则表达式r'(?<=同学|战友|师兄)\w+'表示匹配'同学'、'战友'或'师兄'等称谓后面的子字符串。各称谓使用分支条件进行匹配。匹配的结果不包括称谓。