|
2つパターン指定しても一つ目の<label for=<#DBL>A_\dL<#DBL>>(..*)<span、このパターンの結果しか取得できません。2つ目のパターンである<span class=<#DBL>number<#DBL> id=<#DBL>res3<#DBL>>(\d{1,3})</span> 件、この結果が取得できません。 コードの書き方が間違っているのでしょうか? |を使用して複数としているのですが。 今の自分ではできないので助けて頂けないでしょうか?
Public regvb=CREATEOLEOBJ("VBScript.RegExp")
//読込ファイル fid="C:\Users\aruke\Desktop\a.html"
//書込ファイル fid1="C:\Users\aruke\Desktop\da1.txt"
file = FOPEN(fid, F_READ) file1 = FOPEN(fid1, F_READ or F_WRITE8)
文字列全体=fget(file,-2) Pattern="<label for=<#DBL>A_\dL<#DBL>>(..*)<span | <span class=<#DBL>number<#DBL> id=<#DBL>res3<#DBL>>(\d{1,3})</span> 件"
Matches=regvb_Execute(文字列全体, Pattern)
for i = 0 to Matches.count-1 FPUT(file1, Matches.Item(i).SubMatches(0),i+1) next FPut(file1, Join(Split(FGet(file1, F_ALLTEXT), "<#CR>"), "<#CR>", TRUE), F_ALLTEXT)
FCLOSE(file) FCLOSE(file1)
//正規表現 Function regvb_Execute(str, Pattern, IgnoreCase=TRUE, Global=TRUE) regvb.IgnoreCase=IgnoreCase regvb.Global=Global regvb.Pattern=Pattern Matches=regvb.Execute(str) Result=Matches Fend
|
No.3758 2017/04/19(Wed) 11:12:58
|
☆ Re: 正規表現で2つパターン指定して複数の検索結果を取得する方法 / ジンギスカン |
|
|
パターンをそれぞれ1つ指定、下記のようなコードであれば期待どおりの2つのパターン結果が取得できます。何か、簡潔にできるコードないでしょうか? |でパターンを複数にしたら、複数の結果が取得できるという認識なのですが、うまくいきません。
Public regvb=CREATEOLEOBJ("VBScript.RegExp")
//読込ファイル fid="C:\Users\aruke\Desktop\a.html"
//書込ファイル fid1="C:\Users\aruke\Desktop\da1.txt"
file = FOPEN(fid, F_READ) file1 = FOPEN(fid1, F_WRITE8)
文字列全体=fget(file,-2) // Pattern="<label for=<#DBL>A_\dL<#DBL>>(..*)<span"
Pattern="<label for=<#DBL>A_\dL<#DBL>>(..*)<span "
// Pattern="<span class=<#DBL>number<#DBL> id=<#DBL>res3<#DBL>>(\d{1,3})</span> 件"
Matches=regvb_Execute(文字列全体, Pattern)
for i = 0 to Matches.count-1 FPUT(file1, Matches.Item(i).SubMatches(0),i+1) next FPut(file1, Join(Split(FGet(file1, F_ALLTEXT), "<#CR>"), "<#CR>", TRUE), F_ALLTEXT)
FCLOSE(file) FCLOSE(file1)
Public regvb=CREATEOLEOBJ("VBScript.RegExp")
//読込ファイル fid="C:\Users\aruke\Desktop\a.html"
//書込ファイル fid1="C:\Users\aruke\Desktop\da1.txt"
file = FOPEN(fid, F_READ) file1 = FOPEN(fid1, F_READ or F_WRITE8)
文字列全体=fget(file,-2) // Pattern="<label for=<#DBL>A_\dL<#DBL>>(..*)<span | <span class=<#DBL>number<#DBL> id=<#DBL>res3<#DBL>>(\d{1,3})</span> 件"
Pattern="<span class=<#DBL>number<#DBL> id=<#DBL>res3<#DBL>>(\d{1,3})</span> 件"
// Pattern="<span class=<#DBL>number<#DBL> id=<#DBL>res3<#DBL>>(\d{1,3})</span> 件"
Matches=regvb_Execute(文字列全体, Pattern)
for i = 0 to Matches.count-1 FPUT(file1, Matches.Item(i).SubMatches(0)) next FPut(file1, Join(Split(FGet(file1, F_ALLTEXT), "<#CR>"), "<#CR>", TRUE), F_ALLTEXT)
FCLOSE(file) FCLOSE(file1)
//正規表現 Function regvb_Execute(str, Pattern, IgnoreCase=TRUE, Global=TRUE) regvb.IgnoreCase=IgnoreCase regvb.Global=Global regvb.Pattern=Pattern Matches=regvb.Execute(str) Result=Matches Fend
|
No.3759 2017/04/19(Wed) 11:16:33
|
|
☆ Re: 正規表現で2つパターン指定して複数の検索結果を取得する方法 / しゅん |
|
|
元の方法で正しく取得できていると思います。 手元の環境では、期待通りでした。
FPUTした結果をよく確認されていますでしょうか? おそらく「(..*)」が問題かと思います。 「[^<\s]+」とかにすると良いと思います。(意味は調べてください) 最長一致・最短一致を勉強するのも良いと思います。
|
No.3760 2017/04/19(Wed) 13:15:27
|
|
☆ Re: 正規表現で2つパターン指定して複数の検索結果を取得する方法 / ジンギスカン |
|
|
しゅん様、返信ありがとうございます。 >「[^<\s]+」とかにすると良いと思います 一度調べてみます。 >最長一致・最短一致を勉強するのも良いと思います。 ..*?をつけるのですね。
FPUT(file1, Matches.Item(i).SubMatches(i)にすると希望通り取得できました。 正規表現の一致のメカニズムを再度勉強し直します。
|
No.3765 2017/04/19(Wed) 20:33:24
|
|