正则表达式在两个下划线之间拉出字符串

时间:2016-10-25 18:15:23

标签: regex preg-match

我有 anystring_OPCtarget_anystring 类型的模式。 我可以获得一些帮助,以验证两个下划线之间的字符串是否为"OPC(target)"类型,并使用正则表达式拉出目标。

假设我的字符串是:MP700000001_OPC32_812345643 首先,我需要验证下划线之间的字符串是否以OPC开头,然后在OPC之后和第二个下划线之前获取目标文本。

帮助赞赏!!!

谢谢

4 个答案:

答案 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之前_
  • 之后的数据

RegEx Demo

<强>代码:

$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);
    }