正则表达式仅在字符跟踪时匹配字符串

时间:2012-10-26 21:57:42

标签: regex apache

我需要帮助创建正则表达式。 以下是两个示例字符串:

/path/to/file.jpg
/path/to/file.type.jpg

分别是我试图抓住:

file.jpg
file.type.jpg

但我想将这三个字符串作为单独的字符串捕获。

file,jpg
file,type,jpg

请注意,我没有捕捉这些时期。 我认为这样的事情可以起作用(不包括新行):

([a-z]+)\.
[([a-z]+)[\.]{1}]?
([a-z]{3})

指导将不胜感激。 我想知道是否有其他修改我需要使用它来正确捕获它。

顺便说一下,上面的表达错误:(

4 个答案:

答案 0 :(得分:1)

您可以使用:"\/(?:\w+\/)+(\w+)\.?(\w+)?\.(\w+)"作为正则表达式。

编辑:没读过关于不匹配的点。

直播Demo

答案 1 :(得分:1)

你必须使用: /(\w+)(\.(\w+))?\.(\w+){3,4}\b

然后捕获组1,3和4将是你的:file(1)type(3)和jpg / png(4)

分开的小组:

  1. (\w+) - 匹配单词字符1或更多(相当于说:{1, }
  2. (\.(\w+))? - 匹配第3组并使用前面的点,并使整个组可选(?
  3. (\w+) - as gr 1
  4. (\w{3,4})\b - 匹配3个或4个单词字符({3,4})并确保在这些字符之后没有其他字符(单词结束 - \b - !如果支持!)

答案 2 :(得分:1)

这个正则表达式应该有效:

/(\w+)\.(\w+)(?:\.(\w+))?$/

Live Demo

答案 3 :(得分:1)

我建议你使用模式

\/([^.]+)\.?([^.]+|)\.([^.]+)$

你将有3个组:文件,类型(如果不存在则为空)和扩展名