2012-12-25 34 views
1

我有一個HTML這個樣子的(它的閃存播放器的JavaScript):PHP:的preg_match(新的挑戰)

var flashvars = 
      { 
       'autoplay'   : autoplay, 
       'autoreplay'  : 'false', 
       'start'    : '', 
       'hideLinkPane'  : 'true', 
       'disable_sharebar' : 'true', 
       'disablePauseroll' : disablePauseroll, 
       'video_url'   : encodeURIComponent('WQFuk9Py2VC3jsCrPDJ69xtsj33MiXAElBzQw3TSHqOOyDYL0vRJELrB1hTTW3NG0A54kE2FVueuHMkQd8JveYb92eV+dYH4IUrrvJdP5Of9HGi+5i6GT11nL0dAv/ecyP4sB0jM8rVZzyS8imLarvPUvPuFPvvB8nwYXZ2ZKon4IPjmtC8SPftaw0PSuZKMg735hLCraeAE3lMQbRwiY7yMHKmUHDALG1Ky+HBDiK20vAGEIMwzPwKZmhbBXRGiHzEiXiRk4JgaVyp6N66EALao7VOE7UTzJLs='), 
       'encrypted'   : 'true', 
       'video_title'  : "some cool vids title here", 
       'embed_js'   : "", 
       'prerollRepeat'  : "false" 
      }; 

如何使用的preg_match來提取VIDEO_TITLE的價值,使其成爲:

echo $ videoTitle;

將輸出:一些很酷的視頻標題這裏

和VIDEO_URL將輸出:

WQFuk9Py2VC3jsCrPDJ69xtsj33MiXAElBzQw3TSHqOOyDYL0vRJELrB1hTTW3NG0A54kE2FVueuHMkQd8JveYb92eV + dYH4IUrrvJdP5Of9HGi + 5i6GT11nL0dAv/ecyP4sB0jM8rVZzyS8imLarvPUvPuFPvvB8nwYXZ2ZKon4IPjmtC8SPftaw0PSuZKMg735hLCraeAE3lMQbRwiY7yMHKmUHDALG1Ky + HBDiK20vAGEIMwzPwKZmhbBXRGiHzEiXiRk4JgaVyp6N66EALao7VOE7UTzJLs =

我的PHP是這樣的:

$pagex = $this->page; 
$patternx = '/("video_title":")(.*?)(")/i'; 
if(preg_match($patternx,$pagex,$arx)){ 
    $key = $arx[2]; 
}    


$page = $this->page; 
$pattern = '/("video_url":")(.*?)(")/i'; 
if(preg_match($pattern,$page,$ar)){ 
$link = $ar[2]; 
} 

它不起作用。它什麼都沒顯示。

+0

我想你需要回到基礎。你不靈活引號('[「']'),你不佔空格('\ S *'),你不佔'encodeURIComponent'等 –

+0

任何引用鏈接? – Redbox

+2

爲什麼你用正則表達式這樣做呢?爲什麼不哈瓦JavaScript的使用JSON發送的對象,並使用'json_decode()'在PHP? – Barmar

回答

1
$string = "'disablePauseroll' : disablePauseroll, 
      'video_url'   : encodeURIComponent('WQFuk9Py2VC3jsCrPDJ69xtsj33MiXAElBzQw3TSHqOOyDYL0vRJELrB1hTTW3NG0A54kE2FVueuHMkQd8JveYb92eV+dYH4IUrrvJdP5Of9HGi+5i6GT11nL0dAv/ecyP4sB0jM8rVZzyS8imLarvPUvPuFPvvB8nwYXZ2ZKon4IPjmtC8SPftaw0PSuZKMg735hLCraeAE3lMQbRwiY7yMHKmUHDALG1Ky+HBDiK20vAGEIMwzPwKZmhbBXRGiHzEiXiRk4JgaVyp6N66EALao7VOE7UTzJLs='), 
      'encrypted'   : 'true', 
      'video_title'  : \"some cool vids title here\","; 

preg_match("/encodeURIComponent\('([^']+)/", $string, $match); 

echo $match[1]; // URL 

preg_match('/video_title[^"]+"([^"]+)/', $string, $match); 

echo $match[1]; // Title 

這將提取內encodeURIComponent()'引號之間的文本字符串,第二個會提取"引號內的文字video_title

+0

感謝,這項工作很好。 video_title怎麼樣你有什麼解決方法? – Redbox

+0

@Redbox是請參閱編輯。 –

+0

完美的感謝.. – Redbox

0

對於VIDEO_TITLE(允許在標題逃脫"):

'video_title'\s*:\s*"(.*?)*(?<!\\)" 

In PHP:

$pattern='\'video_title\'\s*:\s*"(.*?)*(?<!\\)"'; 

而對於網址:

'video_url'\s*:\s*encodeURIComponent\('([^']*)'\) 

和:

$pattern='\'video_url\'\s*:\s*encodeURIComponent\(\'([^\']*)\'\)'; 
+0

這樣的:$ patternx = '/'video_title'\s*:\s*"(.*?)*(? Redbox

+0

的preg_match( 「/ 'VIDEO_TITLE' \ S *:\ S *」(*)*(<\\)「\ S *,$ pageX屬性,$匹配。?!); 這回我:解析錯誤:語法錯誤,意外 '(' – Redbox

+0

你需要躲避' '':'$ patternx = '\' VIDEO_TITLE \' \ S *:\ S * 「?!(*)*(<\)」 \ S *,';'(爲什麼'/我'?) – Pharaoh