我有一个类型的模式anystring_OPCtarget_anystring。 如何验证两个下划线之间的字符串是否为"OPC(target)"
,并使用正则表达式提取目标,我可以获得一些帮助。正则表达式来拉出2个下划线之间的字符串
想,如果我的字符串为:MP700000001_OPC32_812345643
第一,我需要验证,如果下划线的字符串OPC
开始,然后OPC
后第二下划线之前获得目标文本。
帮助赞赏!!!
谢谢
我有一个类型的模式anystring_OPCtarget_anystring。 如何验证两个下划线之间的字符串是否为"OPC(target)"
,并使用正则表达式提取目标,我可以获得一些帮助。正则表达式来拉出2个下划线之间的字符串
想,如果我的字符串为:MP700000001_OPC32_812345643
第一,我需要验证,如果下划线的字符串OPC
开始,然后OPC
后第二下划线之前获得目标文本。
帮助赞赏!!!
谢谢
你可以使用这个表达式:
^[^_]*_OPC\K[^_]+
抢匹配的数据。
^[^_]*_OPC
将匹配高达第一_
任何文本,然后OPC
。 OPC
后\K
将重置所有先前匹配数据[^_]+
将匹配数据第二_
代码之前:
$str = 'MP700000001_OPC32_812345643';
preg_match('/^[^_]*_OPC\K[^_]+/', $str, $matches);
echo $matches[0] . "\n";
//=> 32
用下面的办法来得到所需的 “目标”:
$str = 'MP700000001_OPC32_812345643';
$target = '';
if (preg_match('/^[^_]+_OPC(\w+)_\w*$/', $str, $matches)) {
$target = $matches[1];
}
print_r($target); // 32
_([^_]+)_
首先capturegroup是两个下划线之间文本
说明:
_([^_]+)_
_ First underscore
( ) Capture group
[^ ] Everything but this character class
_ No underscores
+ One or more times
_ Closing underscore
如果您使用的是支持先行和回顾后,你可以做一些这样的语言:
Pattern p = Pattern.compile("(?<=_)OPC[0-9]+(?=_)");
Matcher m = p.matcher("MP700000001_OPC32_812345643");
if (m.find()) {
String target = m.group(0);
System.out.println(target);
}