簡體   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