首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用RegEx(preg匹配)获取字符串的子字符串

使用RegEx(preg匹配)获取字符串的子字符串
EN

Stack Overflow用户
提问于 2014-05-07 14:34:40
回答 1查看 115关注 0票数 0

嗨,我正试图用php preg_match解析一个子字符串。

字符串输入如下:

代码语言:javascript
运行
复制
25k8cp1gl6-Mein Herze  im Blut, BWV 199: Recitative: Ich  Wunden_SVD1329578_14691639_unified :CPN_trans:

这里我想提取Mein Herze im Blut, BWV 199: Recitative: Ich Wunden

代码语言:javascript
运行
复制
25k8cp1gl6-La Puesta Del Sol_SVD1133599_12537702_unified :CPN_trans:

这里我想提取La Puesta Del Sol

代码语言:javascript
运行
复制
La Puesta Del Sol_SVD1133599_12537702_unified :CPN_trans:

这里我想提取La Puesta Del Sol

代码语言:javascript
运行
复制
25k8cp1gl6-La Puesta Del Sol_MNA1133599_12537702_unified :CPN_trans:

这里我想提取La Puesta Del Sol

代码语言:javascript
运行
复制
25k8cp1gl6-La Puesta Del Sol_IMC1133599_12537702_unified :CPN_trans:

这里我想提取La Puesta Del Sol

因此,基本上,我想在_SVD_MNA_IMC之前提取字符串,不包括字符串25k8cp1gl6-的第一部分。

提前谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-07 14:43:24

这是表达给您的:

代码语言:javascript
运行
复制
(?<=25k8cp1gl6-).*?(?=_(?:SVD|MNA|IMC))

解释:

(?<=...)是前瞻性的语法,这意味着我们从查找(但不包括在我们的匹配中) "25k8cp1gl6-“开始。然后,我们懒惰地将整个字符串与.*?匹配。最后,(?=...)是一种前瞻性语法。我们寻找"_“后面的"SVD”、"MNA“或"IMC”(在非捕获组|中用(?:...)分隔)。

PHP:

代码语言:javascript
运行
复制
$strings = array(
    '25k8cp1gl6-Mein Herze  im Blut, BWV 199: Recitative: Ich  Wunden_SVD1329578_14691639_unified :CPN_trans:',
    '25k8cp1gl6-La Puesta Del Sol_SVD1133599_12537702_unified :CPN_trans:',
    '25k8cp1gl6-La Puesta Del Sol_MNA1133599_12537702_unified :CPN_trans:',
    '25k8cp1gl6-La Puesta Del Sol_IMC1133599_12537702_unified :CPN_trans:',
);

foreach($strings as $string) {
    if(preg_match('/(?<=25k8cp1gl6-).*?(?=_(?:SVD|MNA|IMC))/', $string, $matches)) {
        $substring = reset($matches);
        var_dump($substring);
    }
}

另一个使用preg_replace()的选项是在这里降级

代码语言:javascript
运行
复制
^\w+-(.*?)_(?:SVD|MNA|IMC).*

Explanation:

这个字符串匹配整个字符串,但是捕获了我们想要保留的部分,这样我们就可以在替换时引用它。还请注意,我是从^\w+-而不是25k8cp1gl6-开始的。这几乎只是查找任意数量的“单词字符”([A-Za-z0-9_]),后面跟着字符串开头的连字符。如果它需要"25k8cp1gl6-",您可以替换它;我只想展示另一个选项。

PHP:

代码语言:javascript
运行
复制
$strings = array(
    '25k8cp1gl6-Mein Herze  im Blut, BWV 199: Recitative: Ich  Wunden_SVD1329578_14691639_unified :CPN_trans:',
    '25k8cp1gl6-La Puesta Del Sol_SVD1133599_12537702_unified :CPN_trans:',
    '25k8cp1gl6-La Puesta Del Sol_MNA1133599_12537702_unified :CPN_trans:',
    '25k8cp1gl6-La Puesta Del Sol_IMC1133599_12537702_unified :CPN_trans:',
);

foreach($strings as $string) {
    $substring = preg_replace('/^\w+-(.*?)_(?:SVD|MNA|IMC).*/', '$1', $string);
    var_dump($substring);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23520759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档