移植正则表达式代码

时间:2012-07-26 09:51:29

标签: php regex asp-classic porting

我有一些最初用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版本中转义正斜杠字符外,它是相同的。 (我也测试了添加它,效果相同)。

在我遗漏的正则表达式中是否存在一些微妙的差异,或者是我看不到的一些愚蠢的错误?

感谢。

1 个答案:

答案 0 :(得分:2)

.NET和PHP正则表达式之间存在许多差异。 1 。然而,ASP-Classic使用正则表达式的时间要长得多,而且文档记录也不多。

假设 Scripting Clinic 文章Microsoft Beefs Up VBScript with Regular Expressions是正确的,那么您需要重新编写表达式。

首先,不支持*???+?的“最小匹配”。


1 比较掌握正则表达式(3 rd 版本)的表9-1和10-1。