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

Shr*_*rav 5 regex preg-match

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

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

帮助赞赏!

谢谢

小智 6

_([^_]+)_
Run Code Online (Sandbox Code Playgroud)

第一个捕获组是两个下划线之间的文本
解释:

_([^_]+)_
_                First underscore
 (     )         Capture group
  [^ ]           Everything but this character class
    _            No underscores
      +          One or more times
        _        Closing underscore
Run Code Online (Sandbox Code Playgroud)


anu*_*ava 1

您可以使用这个正则表达式:

^[^_]*_OPC\K[^_]+
Run Code Online (Sandbox Code Playgroud)

并抓取匹配的数据。

  • ^[^_]*_OPC将匹配先到_后跟 的任何文本OPC
  • \K将重置所有先前匹配的数据
  • [^_]+将匹配OPC第 2 个之后的数据_

正则表达式演示

代码:

$str = 'MP700000001_OPC32_812345643';

preg_match('/^[^_]*_OPC\K[^_]+/', $str, $matches);

echo $matches[0] . "\n";
//=> 32
Run Code Online (Sandbox Code Playgroud)