逃避preg_regex中的斜线还是我必须?

时间:2013-04-17 19:02:15

标签: php regex

我有这个文字和表达,我尝试了一切,但它不起作用。如果我在结尾处删除斜杠,那么它可以正常工作。根据preg_quote手册,我需要解决的唯一问题是:

  

。 \ + *? [^] $(){} =! < > | : -

我尝试使用反斜杠\/来逃避最后一个斜杠,并尝试\\/,但仍然无效。

Sample text:  song
file="http://mehangcuugiup.net/images/radio/2013/t4/Thu Ba ngay
16-4-2013.mp3" title="Thu Ba ngay 16-4-2013"/;

NOT Match Expression: $exp = '@song file="(http.+?\.mp3)"
title=".+?(\d+\-\d+\-\d{4})"/@i';

Good Expression: $exp = '@<song file="(http.+?\.mp3)"
title=".+?(\d+\-\d+\-\d{4})"@i';

我知道我可以删除最后一个斜杠来获取我的数据,但这个问题一直困扰着我,我想知道它的原因。

感谢您的任何意见!

2 个答案:

答案 0 :(得分:0)

你需要使用双引号"\/"来逃避该斜杠。“

$exp = "@song file=\"(http.+?.mp3)\" title=\".+?(\d+-\d+-\d{4})\"\/@i";

答案 1 :(得分:0)

如果您将其用作分隔符,则只需要转义/。在您的情况下,分隔符为@,因此您无需转义/(但是,您执行需要转义@)。

<?php

$song = 'song file="http://mehangcuugiup.net/images/radio/2013/t4/Thu Ba ngay 16-4-2013.mp3" title="Thu Ba ngay 16-4-2013"/';
$exp = '@song file="(http.+?\.mp3)" title=".+?(\d+\-\d+\-\d{4})"/@i';

if(preg_match($exp, $song, $match) === 1){
    var_dump($match);
}

DEMO:http://ideone.com/iuunxe