2012-07-26 97 views
1

我有一些最初用PHP編寫的正則表達式代碼,我需要將它移植到ASP。原來這裏是PHP代碼:移植正則代碼

$contents = file_get_contents("http://localhost/source.txt"); 
$title = 'My Title'; 
preg_match("/<b>$title.*?(<p.*?)<\/td/smi",$contents,$matches); 
print_r($matches); 

這裏是ASP移植版本:

contents = File_Get_Contents("http://localhost/source.txt") 
response.write contents 
title = "My Title" 
regex = "<b>" + title + ".*?(<p.*?)</td" 
Set objRE2 = New RegExp 
With objRE2 
    .Pattern = regex 
    .IgnoreCase = True 
    .Global  = True 
    .MultiLine = True 
End With 

Set myMatches = objRE2.Execute(contents) 
'myMatches - Count is 0 

Function File_Get_Contents(strFile) 
    ' Remote File 
    If Left(strFile, 7) = "http://" Or Left(strFile, 8) = "https://" Then 
     'Set objXML = Server.CreateObject("Microsoft.XMLHTTP") 
     ' Use this line if above errors 
     Set objXML = Server.CreateObject("MSXML2.ServerXMLHTTP") 
     objXML.Open "GET", strFile, False 
     objXML.Send() 
     File_Get_Contents = objXML.ResponseText 
     Set objXML = Nothing 
    ' Local File 
    Else 
     Set objFSO = Server.CreateObject("Scripting.FileSystemObject") 
     Set objFile = objFSO.OpenTextFile(strFile, 1) 
     File_Get_Contents = objFile.ReadAll() 
     Set objFile = Nothing 
     Set objFSO = Nothing 
    End If 
End Function 

的Source.txt:

<td> 
<b>My Title</b><br> 
<p>My Content</p></td> 

如果我寫了兩個實際的正則表達式模式語言,除了在PHP版本中轉義正斜槓字符之外,它是一樣的。 (我也測試過添加這個,具有相同的效果)。

在正則表達式中,我是否存在一些細微的差異,或者是我看不到的一些愚蠢的錯誤?

謝謝。

回答

2

.NET和PHP正則表達式之間有許多區別。 。然而,ASP-Classic使用正則表達式的時間要長得多,而且記錄不完善。

假設這個腳本診所文章Microsoft Beefs Up VBScript with Regular Expressions是正確的,那麼您將需要重新編寫您的表達式。

首先不支持「最小匹配」與*?,??+?


比較表9-1和10-1精通正則表達式(3 RD版)。

+0

感謝您的支持。沒有要求你「提供完整的代碼」,你能建議更多的方法來替換asp的正則表達式嗎? – 2012-07-26 11:31:02

+0

@AndrewHall很難不知道你想要匹配什麼*以及你不想匹配什麼*。由於正則表達式是處理HTML(和XML)的錯誤工具,我寧願建議您尋找更好的工具。 – Richard 2012-07-26 12:07:52