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

ソース.txt:

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

両方の言語で実際の正規表現パターンを書き出すと、PHP バージョンのスラッシュ文字のエスケープを除いて同じです。(これを追加することもテストしましたが、同じ効果があります)。

私が見逃している正規表現に微妙な違いがありますか、それとも私が見ることができないばかげた間違いですか?

ありがとう。

4

1 に答える 1

2

.NET と PHP の正規表現には多くの違いがあります。1 . ただし、ASP-Classic での正規表現の使用ははるかに古く、あまり文書化されていません。

このScripting Clinicの記事Microsoft Beefs Up VBScript with Regular Expressionsが正しいと仮定すると、式を書き直す必要があります。

*?そもそも、 、 、??との「最小マッチング」はサポートされていません+?


1 Mastering Regular Expressions (第 3)の表 9-1 と 10-1 を比較してください。

于 2012-07-26T10:29:30.327 に答える