正则表达式字符串分割

3

我对正则表达式还比较新。我一直在尝试分割字符串以获取初始部分的字符串来创建文件夹。

以下是我需要分割的几个变量的示例。

test1-792X612.jpg

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

是否有一种使用正则表达式的方法可以得到test1test-with-multiple-hyphens


1
你需要正则表达式吗?也许可以使用 substr("test1-792X612.jpg", 0, -12) - Tony
4个回答

3
您可以使用类似于以下的正则表达式:

```

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

工作演示

在此输入图片描述

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

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

如果您不想使用“insensitive”标志,您可以将正则表达式更改为:
(.*?)-\d+[Xx]\d+

1
如果您确定所有文件名都以000X000结尾(其中0是任何数字),则应该可以使用以下方法:
/^(.*)-[0-9]{3}X[0-9]{3}\.jpg$/
< p > (.*) 的值将包含您要查找的部分。

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

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

0
您可以使用这个简单的正则表达式:
(.+)(?=-.+$)

说明:

(.+) : 捕获所需部分

(?=-.+$) : (正向先行断言) 该部分紧随着一个破折号部分

演示现场


-1
如果我正确理解了您的问题,您想要将文件中带连字符的部分拆分为目录。表达式 (.*?)-([^-]+\.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
// )

有人能解释一下这个-1吗?如果是OP的话,那我就假设我误解了问题,可以进行调整。 - Sam
好的,请告诉我如果您有任何问题。我专注于 PHP 方面的事情,因为似乎那是您感到困惑的地方。如果您更喜欢其他一些正则表达式(它们在“###X###”上更具体),您也可以将其集成进来。 - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接