Regexp的麻烦

时间:2016-06-27 18:43:59

标签: php regex

我必须在<something:any-char>内替换URL等模式的匹配项。 例如,像URL这样:

http://some-site.com/some-acion/pippo:1/mypar:asdasd/pippo2:sdd/ .....

应该成为:

http://some-site.com/some-acion/pippo:1/pippo2:sdd/ .....

换句话说,我必须从网址中筛选出mypar:的任何内容。 我将使用PHP。 我尝试使用RegExp:

.*[\/]+(sh:.*)[\/]?.*$

但它只匹配/pippo:3/mypar:wdfds之类的字符串。像/pippo:2/mypar:asa/7pippo:1/这样的字符串不匹配。 任何提示都表示赞赏。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

$url = "/pippo:2/mypar:asa/7pippo:1/";
$stripped = preg_replace("/\/mypar:.*?(\/|$)/", "$1", $url);

答案 1 :(得分:0)

惰性点匹配.*?与正向前瞻(?=/|$)/或字符串结尾)的组合可以替换为仅仅任意0+除了/ 以外的字符[^/]*

'~/mypar:[^/]*~'

请参阅the documentation

~分隔符可以在模式中使用/而无需转义。

模式详细信息:

  • / - 正斜杠
  • mypar: - 一系列文字字符
  • [^/]* - 除/字符
  • 以外的零个或多个字符

请参阅regex demo

$re = '~/mypar:[^/]*~'; 
$str = "/pippo:2/mypar:asa/7pippo:1/";
$result = preg_replace($re, '', $str, 1);
echo $result;