|
サイトのソースをinnerhtmlで取得し、正規表現でIDの数字のみを抜き出したいですが、ExecuteからFOR文でMatches.Item(i).Valueで取得し、FPUTでファイルに書き出し、それをfgetで全テキスト取得し、chgmojでいらないIDの前後を削除しています。もっとダイレクトに正規表現のみでIDのみを抜き出す方法ないでしょうか?
【サイトソース】 テキスト1 id="inline_1806"> テキスト2 id="inline_1206"> テキスト3 id="inline_1156">
【正規表現で検索できている分】 id="inline_1806"> id="inline_1206"> id="inline_1156">
【希望処理】 1806 1206 1156
【試してスクリプト】
文字列全体=IE.document.body.innerhtml
Public regvb=CREATEOLEOBJ("VBScript.RegExp")
// fid="" file = FOPEN("Desktop\wp.txt", F_WRITE)
Pattern="inline_\d{1,4}" Matches=regvb_Execute(文字列全体, Pattern)
for i = 0 to Matches.count-1 FPUT(file, Matches.Item(i).Value, i+1) next
zenn=fget(file, F_ALLTEXT)
tesaa=chgmoj(zenn, "id=<#DBL>inline_", "") tesaa=chgmoj(tesaa, "<#DBL>>", "") tesaa=chgmoj(zenn, "inline_", "") FPUT(file, tesaa,F_ALLTEXT) FPut(file, Join(Split(FGet(file, F_ALLTEXT), "<#CR>"), "<#CR>", TRUE), F_ALLTEXT)
fclose(file) 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.3511 2017/02/19(Sun) 23:39:24
|
☆ Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / しき |
|
No.3512 2017/02/20(Mon) 00:30:15
|
|
☆ Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / ゆうい |
|
|
しき様、ありがとうございます。こんなに便利なやり方あるんですね。 _(\d{1,4})、()でくくってサブマッチさせるやり方とても簡単で使いやすいです。
|
No.3513 2017/02/20(Mon) 08:54:10
|
|
☆ Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / しろまさ |
|
|
慣れたらreplaceも試して下さい。速くなりますよ。
TextBlock aaa テキスト1 id="inline_1806"> テキスト2 id="inline_1206"> テキスト3 id="inline_1156"> EndTextBlock
list = regReplace(aaa, ".*inline_(\d+).*|.*\r\n", "$1") MsgBox(list)
// 正規表現 置換 Function regReplace(a_text, a_ptn, a_after) Dim reg = CreateOLEObj("VBScript.Regexp"); reg.Global = TRUE; reg.Multiline = TRUE; reg.pattern = a_ptn; Result = reg.Replace(a_text, a_after) FEnd
|
No.3515 2017/02/20(Mon) 12:19:53
|
|
☆ Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / stuncloud |
|
|
// 正規表現使わんでもいい気がします
for elem in IE.document.querySelectorAll("*[id]") // id属性のあるエレメントを列挙 n = replace(elem.id, "inline_", "") if chknum(n) then print n // 数字っぽいのだけprintする endif next
|
No.3516 2017/02/20(Mon) 12:27:46
|
|
☆ Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / ゆうい |
|
|
しろまさ様、回答ありがとうございます。しろまさ様のスクリプトでもできました。 パターンで、|.*\r\n", "$1"この部分が今の自分の実力では理解ができません。 |が論理和、\r\nの \nが改行にマッチ、\rがキャリッジリターン(行頭復帰)にマッチとなっていますが、なかなか難しいですね。
|
No.3517 2017/02/20(Mon) 15:37:19
|
|
☆ Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / ゆうい |
|
|
stuncloud様、回答ありがとうございます。以下のスクリプトで試したのですが、このような表示がされできませんでした。intenet explorerは動作を停止しましたと表示、プログラム終了のボタンが表示になります。ワードプレスプレスの管理画面のソースのID取得で試しています。
[試したスクリプト] URL1="http://b.jp/nan/" TRY IE = CREATEOLEOBJ("InternetExplorer.Application") EXCEPT EXEC("C:\Program Files\Internet Explorer\iexplore.exe") IE = GETACTIVEOLEOBJ("InternetExplorer.Application") ENDTRY IE.visible = true IE.navigate(URL1)
REPEAT SLEEP(0.1) UNTIL !IE.busy AND IE.readystate = 4
for elem in IE.document.querySelectorAll("*[id]") // id属性のあるエレメントを列挙 n = replace(elem.id, "inline_", "") if chknum(n) then print n // 数字っぽいのだけprintする endif next
|
No.3518 2017/02/20(Mon) 15:43:08
|
|
☆ Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / stuncloud |
|
|
あれれ、なんでしょうね… すいません思いつきで書いたので実際に試してないんですが、IEが停止って大事ですね 理屈の上ではそういう書き方でも抽出できるよ、という例のつもりだったのですが… もうしわけない、あとで時間取れたら確認してみます
|
No.3519 2017/02/20(Mon) 16:30:53
|
|
☆ Re: 正規表現で抜き出した分から、数字のみを抽出する方法 / stuncloud |
|
|
> intenet explorerは動作を停止しましたと表示、プログラム終了のボタンが表示になります。 こちらの環境でも再現しました、原因はわかりません 僕の書いたサンプルは使用しないでください
|
No.3521 2017/02/20(Mon) 17:54:24
|
|