2013-05-10 84 views
0

我使用正則表達式,我有這個代碼塊:PHP正則表達式,如果事情是存在還是不

$find = "/jsfile\.js?[0-9]*</"; 
$switch = 'jsfile.js?version=' . $version . '<'; 
$replace = preg_replace($find, $switch, $data); 

我的問題是,我的JavaScript文件現在有?version=<number>。現在,如果我再次運行這個腳本,它會中斷。

有沒有辦法在我的$find字符串中使用正則表達式說明?version=可能存在也可能不存在?

回答

0

嘗試以下操作:

$find = '/jsfile\.js\?(version=)?[0-9]*</'; 

?,使前面的元素可選,和括號創建組,因此(version=)?表示「可選匹配version=」。請注意,我也從正則表達式的早期版本中逃脫了?,因爲您希望它匹配文字?而不是使s可選。

另外,我從雙切換到單引號正確確保逃逸的作品,如果你要使用雙引號,你會想逃離的每個反斜線,例如:

$find = "/jsfile\\.js\\?(version=)?[0-9]*</"; 
0
$find = '/jsfile\.js\?(version=)?[0-9]*</'; 

像這樣的東西應該做的..

1

使用一個可選的子模式:(?:version=)?

0

您可以使用此圖案代替:

$find = '~jsfile\.js\?\K(?>version=)?\d++(?=<)~'; 
$switch = 'version='. $version; 
$replace = preg_replace($find, $switch, $data); 
相關問題