繁体   English   中英

正则表达式字符串中断

[英]Regular Expression String Break

我是正则表达式的新手。 我一直试图打破字符串来获取字符串的初始部分来创建文件夹。

以下是我需要破解的变量的几个例子。

test1-792X612.jpg

test-with-multiple-hyphens-612X792.jpg

有没有办法使用正则表达式,我可以得到test1test-with-multiple-hyphens

你可以使用这样的正则表达式:

(.*?)-\d+x\d+

工作演示

在此输入图像描述

这个想法是模式将字符串与-NumXNum匹配,但捕获先前的内容。 请注意不区分大小写的标志。

MATCH 1
1.  [0-5]   `test1`
MATCH 2
1.  [18-44] `test-with-multiple-hyphens`

如果您不想使用不敏感标志,可以将正则表达式更改为:

(.*?)-\d+[Xx]\d+

如果您确定所有文件名都以000X000结尾(其中0是任意数字),这应该有效:

/^(.*)-[0-9]{3}X[0-9]{3}\.jpg$/

来自(.*)的值将包含您要查找的部分。

如果可能有更多或更少的数字,但至少有一个:

/^(.*)-[0-9]+X[0-9]+$\.jpg/

你可以使用这个简单的正则表达式:

(.+)(?=-.+$)

解释

(。+)捕获所需的部分

(?= - 。+ $) :( 正向前瞻)这是一个虚线部分

现场演示

如果我正确理解了您的问题,您希望将文件的带连字符的部分分解为目录。 表达式(.*?)-([^-]+\\.jpg)$将捕获最后一个之前和之后的所有内容-.jpg文件中。 然后,您可以使用preg_match()来匹配/捕获这些组,并使用explode()-拆分为不同的目录。

$files = array(
    'test1-792X612.jpg',
    'test-with-multiple-hyphens-612X792.jpg',
);

foreach($files as $file) {
    if(preg_match('/(.*?)-([^-]+\.jpg)$/', $file, $matches)) {
        $directories = explode('-', $matches[1]);
        $file = $matches[2];
    }
}

// 792X612.jpg
// Array
// (
//     [0] => test1
// )
//
// 612X792.jpg
// Array
// (
//     [0] => test
//     [1] => with
//     [2] => multiple
//     [3] => hyphens
// )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM