我是正则表达式的新手。我一直试图打破字符串来获取字符串的初始部分来创建文件夹。
以下是我需要破解的变量的几个例子。
test1-792X612.jpg
test-with-multiple-hyphens-612X792.jpg
有没有办法使用正则表达式,我可以获得test1
和test-with-multiple-hyphens
?
答案 0 :(得分:3)
你可以使用这样的正则表达式:
(.*?)-\d+x\d+
<强> Working demo 强>
这个想法是模式会将字符串与-NumXNum
匹配,但会捕获之前的内容。注意不区分大小写的标记。
MATCH 1
1. [0-5] `test1`
MATCH 2
1. [18-44] `test-with-multiple-hyphens`
如果您不想使用不敏感标记,可以将正则表达式更改为:
(.*?)-\d+[Xx]\d+
答案 1 :(得分:1)
如果您确定所有文件名都以000X000结尾(0&#39; s是任意数字),这应该有效:
/^(.*)-[0-9]{3}X[0-9]{3}\.jpg$/
(.*)
的值将包含您正在寻找的部分。
如果可能有更多或更少的数字,但至少有一个:
/^(.*)-[0-9]+X[0-9]+$\.jpg/
答案 2 :(得分:0)
答案 3 :(得分:-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
// )