2011-07-13 147 views
-1

我嘗試一個正則表達式,但結果並不是我想要的。這是什麼正則表達式?

這是我的正則表達式:

/^(([a-z]{0,})([0-9]+)).*/i 

這是我的字符串:

8500A.JPG //I need to get 8500A but I get 8500 
0130799.JPG // I get the good result : 0130799 

如何將.JPG之前保持字母字符?

+0

表達式匹配everyting,在哪個組中需要'8500A'? –

+0

[PHP獲取文件名無擴展名]的可能重複(http://stackoverflow.com/questions/2183486/php-get-file-name-without-file-extension) – Gordon

回答

0

看起來你可能已越來越封閉括號混淆。

可以指定字符類中許多範圍

/^([0-9A-Za-z]{0,})\.JPG$/ 

要打破它在做什麼:

  • ^=啓動線
  • $ =行尾
  • (...)= $ 1會在這裏得到任何東西
  • [A-Za-z0-9] =匹配AZ之間的任何東西,az和之間的任何東西een 0-9
  • {0,} = 0或更多次
  • 。 =轉義,所以你使用文字「。」

此處瞭解詳情: http://www.regextester.com/pregsyntax.html

希望幫助

0

也許

/^(([a-z]{0,})([0-9]+)([a-z]*)).*/i 

你到底需要什麼?

+0

它適用於我,謝謝! 我需要從擴展中清除字符串 – bahamut100

+2

在這種情況下,您不需要正則表達式。只需使用'$ pos = strrpos($ text,'。'); if($ pos!== false)$ text = substr($ text,0,$ pos);'。 – Gedrox

1

你可以嘗試:

/^(\w+).*?\.\w+$/i 
0

我覺得這個簡單的正則表達式正確

/^([a-z0-9]+)\.*/i 
0

如何:

/^(([a-z]*)([0-9]+.*?))\..*$/i 
0

有了這個代碼:

$pattern = "/^([0-9]+[a-zA-Z]*).*$/"; 
preg_match($pattern, "8500A.JPG", $matches); 
echo $matches[1];  

preg_match($pattern, "0130799.JPG", $matches); 
echo $matches[1]; 

輸出將是:

8500A 
0130799 
0

如果您只想從文件名剝離擴展名,爲什麼不使用pathinfo()

$filename = pathinfo($yourfile, PATHINFO_FILENAME); 

你的情況:

echo pathinfo('8500A.JPG',PATHINFO_FILENAME); 
echo pathinfo('0130799.JPG',PATHINFO_FILENAME); 

輸出:

8500A 
0130799 

這是比較容易的方式,也比使用正則表達式吸塵器