0

我有这个文本和表达式,我尝试了一切,但它不起作用。如果我在最后删除斜线,那么它可以工作。根据 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 = '@&lt;song file="(http.+?\.mp3)"
title=".+?(\d+\-\d+\-\d{4})"@i';

我知道我可以删除最后一个斜线来获取我的数据,但是这个问题已经困扰我一段时间了,我想知道它的原因。

感谢您的任何意见!

4

2 回答 2

0

您需要使用双引号转义该斜线"\/"。`

$exp = "@song file=\"(http.+?.mp3)\" title=\".+?(\d+-\d+-\d{4})\"\/@i";
于 2013-04-17T19:06:42.393 回答
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);
}

演示:http: //ideone.com/iuunxe

于 2013-04-17T19:14:30.757 回答