什么正则表达式?

时间:2011-07-13 08:25:26

标签: php regex string preg-match

我尝试使用正则表达式,但结果并非我想要的结果。

这是我的正则表达式:

/^(([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 个答案:

答案 0 :(得分:1)

您可以尝试:

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

答案 1 :(得分:0)

也许

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

你到底需要什么?

答案 2 :(得分:0)

我认为这个简单的正则表达式是正确的

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

答案 3 :(得分:0)

看起来你可能已经把括号括糊糊了。

在字符类中,您可以指定多个范围

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

希望有所帮助

答案 4 :(得分:0)

怎么样:

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

答案 5 :(得分: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

答案 6 :(得分:0)

如果您只想从文件名中删除扩展名,为什么不使用pathinfo()

$filename = pathinfo($yourfile, PATHINFO_FILENAME);

在你的情况下:

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

输出:

8500A
0130799

WAY EASIER AND CLEANER 比使用正则表达式更好!