与下面的模式匹配的正则表达式

时间:2014-05-02 05:23:57

标签: php regex

我在正则表达方面表现不佳,但今天我遇到了一个不可避免的情况,所以我需要一个符合下面情况的正则表达式:

|hhas.jpg||sd22-9393das.png||8jjas.png||IMG00338-20110109.jpg|

我试过这个正则表达式:/(?<=\|)(\w|\d+\.\w+)(?=\|)/i但没有得到理想的结果......

我希望在两个preg_match符号之间使用PHP的|函数来匹配所有字符串,例如hhas.jpg,sd22-9393das.png等...

4 个答案:

答案 0 :(得分:2)

使用此..

preg_match_all('/\|(.*?)\||/', $str, $matches);
print_r(array_filter($matches[1]));

<强> OUTPUT :

Array
(
    [0] => hhas.jpg
    [1] => sd22-9393das.png
    [2] => 8jjas.png
    [3] => IMG00338-20110109.jpg
)

Demonstration

enter image description here

答案 1 :(得分:2)

您可以使用以下正则表达式:

/\|([^|]*)\|/gi

Demo

匹配字符串:

1. hhas.jpg
2. sd22-9393das.png
3. 8jjas.png
4. IMG00338-20110109.jpg

答案 2 :(得分:1)

你的表达:

/(?<=\|)(\w|\d+\.\w+)(?=\|)/i
写得很好,但只是有一些小缺陷

  • 当您说\w只有一个字符时。

  • OR条件

  • \d+\.\w+仅在符合相同订单时才会匹配。即数字列表首先跟随.,然后是字母或数字或下划线。

更好地将正则表达式更改为:

/(?<=\|)(.*?)(?=\|)/ig

这将为您提供介于| s

之间的任何内容 恕我直言,使用这种问题的外观是一种矫枉过正。更好用:

/\|(.*?)\|/ig

答案 3 :(得分:1)

不使用正则表达式尝试。

explode('||', rtrim(ltrim ('|hhas.jpg||sd22-9393das.png||8jjas.png||IMG00338-20110109.jpg|','|'),'|'));

输出:

Array ( [0] => hhas.jpg [1] => sd22-9393das.png [2] => 8jjas.png [3] => IMG00338-20110109.jpg )