Что за регулярное выражение для этого? - PullRequest
0 голосов
/ 13 июля 2011

Я пробую регулярное выражение, но результат не совсем то, что я хочу.

Это мое регулярное выражение:

/^(([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?

Ответы [ 7 ]

1 голос
/ 13 июля 2011

Вы можете попробовать:

/^(\w+).*?\.\w+$/i
0 голосов
/ 13 июля 2011

Если вы хотите удалить расширения только из имени файла, почему бы не использовать pathinfo () ?

$filename = pathinfo($yourfile, PATHINFO_FILENAME);

В вашем случае:

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

выходы:

8500A
0130799

Это НАИЛУЧШЕ И ЧИСТО , чем при использовании регулярных выражений!

0 голосов
/ 13 июля 2011

С этим кодом:

$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 голосов
/ 13 июля 2011

Как насчет:

/^(([a-z]*)([0-9]+.*?))\..*$/i
0 голосов
/ 13 июля 2011

Похоже, вы могли запутаться в скобках.

внутри класса символов вы можете указать много диапазонов

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

Чтобы разбить то, что он делает:

  • ^ = начало строки
  • $ = конец строки
  • (...) = $ 1 здесь что-нибудь получит
  • [A-Za-z0-9] = сопоставить что-либо между A-Z, между a-z и между 0-9
  • {0,} = 0 или более раз
  • . = escape, поэтому вы используете литерал "."

Больше информации здесь: http://www.regextester.com/pregsyntax.html

Надеюсь, что поможет

0 голосов
/ 13 июля 2011

Я думаю, что это простое регулярное выражение верно

/^([a-z0-9]+)\.*/i 
0 голосов
/ 13 июля 2011

Может

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

Что именно вам нужно?

...