我有 anystring_OPCtarget_anystring 类型的模式。
我可以获得一些帮助,以验证两个下划线之间的字符串是否为"OPC(target)"
类型,并使用正则表达式拉出目标。
假设我的字符串是:MP700000001_OPC32_812345643
首先,我需要验证下划线之间的字符串是否以OPC
开头,然后在OPC
之后和第二个下划线之前获取目标文本。
帮助赞赏!!!
谢谢
答案 0 :(得分:2)
使用以下方法获取所需的"目标":
$str = 'MP700000001_OPC32_812345643';
$target = '';
if (preg_match('/^[^_]+_OPC(\w+)_\w*$/', $str, $matches)) {
$target = $matches[1];
}
print_r($target); // 32
答案 1 :(得分:1)
您可以使用此正则表达式:
^[^_]*_OPC\K[^_]+
并获取匹配的数据。
^[^_]*_OPC
将匹配任何文字,最后是_
,后跟OPC
。\K
将重置以前匹配的所有数据[^_]+
将匹配OPC
之前_
<强>代码:强>
$str = 'MP700000001_OPC32_812345643';
preg_match('/^[^_]*_OPC\K[^_]+/', $str, $matches);
echo $matches[0] . "\n";
//=> 32
答案 2 :(得分:1)
_([^_]+)_
第一个捕获组是两个下划线之间的文本
说明:
_([^_]+)_
_ First underscore
( ) Capture group
[^ ] Everything but this character class
_ No underscores
+ One or more times
_ Closing underscore
答案 3 :(得分:0)
如果您使用支持前瞻和后瞻的语言,您可以执行以下操作:
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);
}