2012-07-26 90 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