このディレクトリの索引

% 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1284632294/649 # # [1] 授業単元:プログラミング基礎 # [2] 問題文(含コード&リンク): # ダイエットファイルに # # 20100930,curry and rice # 20101003,kitsune soba # 20101003,rice ball # # のような形で日付とその日食べた昼食が保存されているとする. # コマンド行引数にダイエットファイル名と日付(yyyymmdd 形式) を指定して実行すると, # ファイルの中から指定した日付を含む行を検索し,その日の昼食を出力するプログラムを作成せよ. # また,引数としてファイルと文字列を指定しなかった場合に,使い方を出力して終了するようにせよ. # 日付の検索には,標準関数char *strstr(const char *str1, const char *str2); を使用するのが簡単である. # # 【実行例】 # % ./q3-3 diet.txt 20100929 # date 20100929 was not found in file diet.txt # % ./q3-3 diet.txt 20101003 # 20101003,kitsune soba # 20101003,rice ball # % ./q3-3 # Usage: ./q3-3 filename date(yyyymmdd) # % # # program :- パラメータを得る(_ファイル,_日付), get_split_lines(_ファイル,[','],LL), 日付をキーに検索する(_日付,LL,LL2), 検索した行を表示する(_日付,LL2). halt. パラメータを得る(_ファイル,_日付) :- user_paramaters(L), 診断(L,_ファイル,_日付),!. 診断([_ファイル,_日付],_ファイル,_日付) :- !. 診断(_,_,_) :- write('Usage: ./prolog filename date(yyyymmdd)\n'), halt. 日付をキーに検索する(_,[],[]) :- !. 日付をキーに検索する(_日付,[[_日付,_その日食べた昼食]|R1],[[_日付,_その日食べた昼食]|R2]) :- 日付をキーに検索する(_日付,R1,R2),!. 日付をキーに検索する(_日付,[_|R1],R2) :- 日付をキーに検索する(_日付,R1,R2),!. 検索した行を表示する([]) :- !. 検索した行を表示する([[_,_日付,_その日食べた昼食]|R]) :- write('%t,%t\n',[_日付,_その日食べた昼食]), 検索した行を表示する(R). # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1312201995/477 # # [1] アルゴリズム論 # [2] Unixコマンドのgrepを実装したmygrepの作成 #   コマンドライン引数で検索文字列とファイル名をもらい、ファイル内に検索文字列が含まれる行があればその行を出力する #   正規表現に対応させる必要はない # [3] # [3.1]windows xp  # [3.2]gcc  # [3.3]c言語 # [4] 無期限 # [5] strstrは使用禁止 # # よろしくおねがいします # program :- user_paramaters([_検索文字列,_ファイル名]), open(_ファイル名,read,Instream), grep_line(Instream,_検索文字列), close(Instream), halt. grep_line(Instream,_検索文字列) :- at_end_of_stream(Instream),!. grep_line(Instream,_検索文字列) :- get_line(Stream,Line), sub_atom(Line,_,_,_,_検索文字列), writef('%t\n',[Line]), fail. grep_line(Instream,_検索文字列) :- grep_line(Instream,_検索文字列). % 以下のサイトは # 出典 :: twitter_by_@a_hisame_20150219 # # "aがn回以上続いた直後にbがn回続く"ことを(拡張)正規表現で有限長で表現できるんでしたっけ? (nは0以上の任意の整数) # 'aがn回以上続いた直後にbがn回続く(nは0以上の任意の整数)'(_文字列,_n,_前文字列,_適合文字列,_後文字列) :- 'aがn回以上続いた'(_n,_文字列,_前文字列,_適合文字列_1,_後文字列_1), '直後にbがn回続く'(_n,_適合文字列_1,_後文字列,_適合文字列,_後文字列). aがn回以上続いた(_n,_a,_文字列,_前文字列,_適合文字列,_後文字列) :- aがn回以上続いた(_n,_a,_文字列,_前文字列,_適合文字列,_後文字列,_), その連続部分では最長である(_a,_前文字列,_後文字列). aがn回以上続いた(_n,_a,_文字列,_前文字列,_適合文字列,_後文字列,_文字列長) :- sub_atom(_文字列,S,_文字列長,R,_適合文字列), _文字列長 >= _n, forall(sub_atom(_適合文字列,_,1,_,_文字),_a = _文字), 前文字列と後文字列を切り出す(_文字列,S,R,_前文字列,_後文字列). 前文字列と後文字列を切り出す(_文字列,S,R,_前文字列,_後文字列) :- sub_atom(_文字列,0,S,_,_前文字列), sub_atom(_文字列,_,R,0,_後文字列). その連続部分では最長である(_或る文字,_前文字列,_後文字列) :- \+(sub_atom(_前文字列,_,1,0,_或る文字)), \+(sub_atom(_後文字列,0,1,_,_或る文字)). '直後にbがn回続く'(_n,_適合文字列_1,_後文字列_1,_適合文字列,_後文字列) :- bがn回続く(_n,_後文字列_1,_bがn個の文字列), atom_concat(_適合文字列_1,_bがn個の文字列,_適合文字列), sub_atom(_後文字列_1,_,R,0,_後文字列). bがn回続く(_n,_後文字列_1,_bがn個の文字列) :- sub_atom(_後文字列_1,0,_n,R,_bがn個の文字列), forall(sub_atom(_bがn個の文字列,_,1,_,_文字),_文字 = b), \+(sub_atom(_後文字列,_n,1,_,b)). % 以下のサイトは # 出典 :: twitter_by_@a_hisame_20150219 # # "aがn回以上続いた直後にbがn回続く"ことを(拡張)正規表現で有限長で表現できるんでしたっけ? (nは0以上の任意の整数) # 'aがn回以上続いた直後にbがn回続く(nは0以上の任意の整数)'(_文字列,_n,_前文字列,_適合文字列,_後文字列) :- 'aがn回以上続いた'(_n,_文字列,_前文字列,L2,L3), '直後にbがn回続く'(_n,L2,L3,L2_2,L3_2), atom_chars(_適合文字列,L2_2), atom_chars(_後文字列,L3_2). 'aがn回以上続いた'(_n,_文字列,_前文字列,L2,L3) :- sub_atom(_文字列,_前文字列,_適合文字列_1,_後文字列_1,L1,L2,L3), all(L2,a), \+(last(L1,a)), \+(L3 = [a|_]), length(L2,Len_1), Len_1 >= _n. '直後にbがn回続く'(_n,L2,L3,L2_2,L3_2) :- findall(b,between(1,_n,_),L), append(L,L3_2,L3), \+(L3_2 = [b|_]), append(L2,L,L2_2). all([],A). all([A|R],A) :- all(R,A). sub_atom(A,H,X,T,HL,XL,TL) :- atomic(X), atom_chars(A,L), atom_chars(X,XL), sub_atom_2(L,S,Len,R,HL,XL,TL), atom_chars(H,HL), atom_chars(X,XL), atom_chars(T,TL). sub_atom(A,H,X,T,HL,XL,TL) :- var(X), atom_chars(A,L), sub_atom_2(L,S,Len,R,HL,XL,TL), atom_chars(H,HL), atom_chars(X,XL), \+(XL = []), atom_chars(T,TL). % 以下のサイトは '文字列の先頭のカッコのみ外す。ただしカッコの入れ子は許さない。'(_文字列,_先頭のカッコが外された文字列) :- atom_chars(_文字列,_文字リスト), 'リストの先頭のカッコのみ外す。ただしカッコの入れ子は許さない。'(_文字リスト,_先頭のカッコが外された文字リスト), atom_chars(_先頭のカッコが外された文字列,_先頭のカッコが外された文字リスト). 'リストの先頭のカッコのみ外す。ただしカッコの入れ子は許さない。'(['('|Tail],Result) :- '最初の右カッコ以外はコピー。ただしカッコの入れ子は許さない。'(Tail,Result),!. 'リストの先頭のカッコのみ外す。ただしカッコの入れ子は許さない。'(_文字リスト,_文字リスト). '最初の右カッコ以外はコピー。ただしカッコの入れ子は許さない。'(['('|_],_) :- !,fail. '最初の右カッコ以外はコピー。ただしカッコの入れ子は許さない。'([')'|Tail],Tail) :- !. '最初の右カッコ以外はコピー。ただしカッコの入れ子は許さない。'([Head|Tail],[Head|Result]) :- '最初の右カッコ以外はコピー。ただしカッコの入れ子は許さない。'(Tail,Result). % 以下のサイトは # 出題場所 :: http://peace.2ch.net/test/read.cgi/tech/1387257592/898 # ●Regular Expressionの使用環境 # 2ちゃんねる専ブラ「JaneView」 または 「php」 # # ●検索か置換か? # 検索 # # ●説明 # ・「季節」「まだ寒い」「もうすぐ」「今は」「もうすぐ」のいずれかの文字列と「春」または「冬」の文字が入った文章を検出したい。 # ・「春」または「冬」という文字は「季節」「まだ寒い」「今は」「もうすぐ」という文字列の前にあっても後ろにあっても良い。 # #   ((春|冬).*(季節|まだ寒い|もうすぐ|今は|もうすぐ)|(季節|まだ寒い|もうすぐ|今は|もうすぐ).*(春|冬)) # ということがしたいのですが短くなりませんか? # # 同じ単語がそれぞれ2つずつ必要だと正規表現が長くなりがちなので (季節|まだ寒い|もうすぐ|今は|もうすぐ) # は1回で済ませるのが希望です。 # #   (春|冬(注:後ろあれば不要))(季節|まだ寒い|もうすぐ|今は|もうすぐ)(春|冬(注:前にあれば不要)) # ↑こんな感じが希望です # # ●対象データ ●希望する結果 # 1 まもなく「季節」は「春」ですね   結果:検出 (季節 & 春) # 2 「春」はよい「季節」ですね     結果:検出 (春 & もうすぐ) # 3 「春」よこい             結果:非検出 # # '・「季節」「まだ寒い」「もうすぐ」「今は」「もうすぐ」のいずれかの文字列と「春」または「冬」の文字が入った文章を検出したい。 ・「春」または「冬」という文字は「季節」「まだ寒い」「今は」「もうすぐ」という文字列の前にあっても後ろにあっても良い。'(_文字列) :- '「季節」「まだ寒い」「もうすぐ」「今は」「もうすぐ」のいずれかの文字列と'(_文字列), '「春」または「冬」の文字が入った文章を'(_文字列), 検出したい. '「季節」「まだ寒い」「もうすぐ」「今は」「もうすぐ」のいずれかの文字列と'(_文字列) :- sub_atom(_文字列,_,_,_,_副文字列_1), member(_副文字列_1,[季節,まだ寒い,もうすぐ,今は,もうすぐ]). '「春」または「冬」の文字が入った文章を'(_文字列) :- sub_atom(_文字列,_,_,_,_副文字列_2), member(_副文字列_2,[春,冬]). 検出したい. % 以下のサイトは # phpの文字置換で質問です # # 【目的】 文字列内の ab を a にする ただしabの後ろがcの場合を除く # 例 ab123 → a123 、 abcde → abcde # # という条件を正規表現で記述するにはどのように書けばよいでしょうか? # # よろしくおねがいします '文字列内の ab を a にする ただしabの後ろがcの場合を除く'(_文字列,_置換された文字列) :- '文字列内のabただしabの後ろがcの場合を除く'(_文字列,_前文字列,_後文字列), '文字列内の ab を a にする ただしabの後ろがcの場合を除く'(_後文字列,_置換された文字列_2), atomic_list_concat([_前文字列,a,_置換された文字列_2],_置換された文字列),!. '文字列内の ab を a にする ただしabの後ろがcの場合を除く'(_文字列,_文字列). '文字列内のabただしabの後ろがcの場合を除く'(_文字列,_前文字列,_後文字列) :- '文字列内のab'(_文字列,_前文字列,_後文字列), 'ただしabの後ろがcの場合を除く'(_後文字列). '文字列内のab'(_文字列,_前文字列,_後文字列) :- sub_atom(_文字列,S,2,R,ab), sub_atom(_文字列,0,S,_,_前文字列), sub_atom(_文字列,_,R,0,_後文字列). 'ただしabの後ろがcの場合を除く'(_後文字列) :- \+(sub_atom(_後文字列,0,1,_,c)). % 以下のサイトは # 出典: Regular Expression(正規表現) Part12 #723 # # ●Regular Expressionの使用環境 # JavaScript # # ●検索か置換か? # 置換 # # ●説明 # 例えばある文字列の中の「体」を「體」へ、「旧」を「舊」へ…、というように変換したいときに全て書き連ねるのではなく正規表現で簡潔に表現する方法はないでしょうか # '例えばある文字列の中の「体」を「體」へ、「旧」を「舊」へ…、というように変換したいときに全て書き連ねるのではなく正規表現で簡潔に表現する方法はないでしょうか'(_文字列,_置換された文字列) :- findall(_文字,文字列中の文字を可能ならば異体字に変換する(_文字列,_文字),L), atomic_list_concat(L,_置換された文字列). 文字列中の文字を可能ならば異体字に変換する(_文字列,_文字) :- sub_atom(_文字列,_,1,_,_文字_1), 異体字変換(_文字_1,_文字). 異体字変換(_文字_1,_文字_2) :- 異体字(_文字_1,_文字_2),!. 異体字変換(_文字,_文字). % 以下のサイトは # 出典: Regular Expression(正規表現) Part12 #713 # # abcxy # abcxY # abcXy # abcXY # に一致する表現を教えてください。 # 'abcxy abcxY abcXy abcXY に一致する'(_一致する文字列) :- sub_atom(_一致する文字列,_,_,_,_副文字列), member(_副文字列,[abcxy,abcXy,abcxY,abcXY]). % 以下のサイトは # 出典: Regular Expression(正規表現)Part12 #561 # ●Regular Expressionの使用環境 # Perl # # ●検索か置換か? # 検索 # # ●説明 # 前に指定したデータを含まない、「スケート」だけマッチさせたい # # # ●対象データ # アイススケート # ローラースケート # スケート # '前に指定したデータを含まない、「スケート」だけマッチさせたい'(_文,_前に指定したデータならび,_前データ,_検索データ,_後データ) :- sub_atom(_文,_前データ,スケート,_後データ), 前に指定したデータを含まない(S1,_指定したデータならび). 前に指定したデータを含まない(S1,_指定したデータならび) :- member(_指定したデータ,_指定したデータならび), sub_atom(S1,_,_,0,_指定したデータ),!, fail. 前に指定したデータを含まない(_,_). sub_atom(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,S,_,R,_適合文字列), sub_atom(_文字列,0,S,_前文字列), sub_atom(_文字列,_,R,0,_後文字列). % 以下のサイトは # 出典: Regular Expression(正規表現) Part12 #524 # # よろしくお願いします。 # # ●Regular Expressionの使用環境 # javascript # # ●検索か置換か? # 置換 # # ●説明 # {{ と }} で囲まれた文字を削除したい # 改行あり # # ●対象データ # {{ABCA # BCAA}} # CABA # {{ABCA}} # # ●希望する結果 # CABA '●検索か置換か? 置換 ●説明 {{ と }} で囲まれた文字を削除したい 改行あり'(_文字列,_二重括弧を削除した文字列) :- '{{ と }} で囲まれた文字を削除したい 改行あり'(_文字列,_二重括弧を削除した文字列). '{{ と }} で囲まれた文字を削除したい 改行あり'(_文字列,_二重括弧を削除した文字列) :- '{{を切り出し、前文字列と後文字列に分解する'(_文字列,_前文字列,_後文字列), '}} まで文字列を削除したい 改行あり'(_後文字列,_二重括弧を削除した後文字列), atom_concat(_前文字列,_二重括弧を削除された後文字列,_二重括弧を削除された文字列),!. '{{ と }} で囲まれた文字を削除したい 改行あり'(_文字列,_文字列). '}} まで文字列を削除したい 改行あり'(_文字列,_二重括弧を削除した文字列) :- sub_atom(_文字列,S,2,R,'}}'), sub_atom(_文字列,_,R,0,_後文字列), '{{ と }} で囲まれた文字を削除したい 改行あり'(_残り文字列,_二重括弧を削除した後文字列),!. '}} まで文字列を削除したい 改行あり'(_文字列,_文字列). '{{を切り出し、前文字列と後文字列に分解する'(_文字列,_前文字列,_後文字列) :- sub_atom(_文字列,S,2,R,'{{'), sub_atom(_文字列,0,S,_,_前文字列), sub_atom(_文字列,_,R,0,_後文字列),!. % 以下のサイトは # 出典: Regular Expression(正規表現) Part12 #507 # ●Regular Expressionの使用環境 # 秀丸 # # ●検索か置換か? # 置換 # # ●説明 # 行の一番最後の全角文字から後を削除したい。 # # ●対象データ # # 東京 abc 大阪静岡 123 名古屋 apple orange # # # ●希望する結果 # # 東京 abc 大阪静岡 123 名古屋 # # # 宜しくお願いします。 '行の一番最後の全角文字から後を削除したい。'(_行文字列,_行の一番最後の全角文字から後を削除した文字列) :- sub_atom(_行文字列,N,1,S,_), sub_atom(_行文字列,S,1,N,_文字), 全角文字(_文字), sub_atom(_行文字列,0,_,N,_行の一番最後の全角文字から後を削除した文字列),!. 全角文字(_全角文字) :- char_code(_全角文字,_文字コード), _文字コード > 255. % 以下のサイトは # 出典: Regular Expression(正規表現) Part12 #468 # # ●Regular Expressionの使用環境 # sed、grep # ●検索か置換か? # 置換 # ●説明 # マッチした結果をそのまま置き換えるでなく、 # 1つ前に改行を入れたい。 # # ●対象データ # 0ABC1DEF2GHI3JKL4MNO # # ●希望する結果 # 0ABC # 1DEF # 2GHI # 3JKL # 4MNO # # よろしくお願いします。 置換規則('0','0'). 置換規則('1','1'). 置換規則('2','2'). 置換規則('3','3'). 置換規則('4','4'). 置換規則('5','5'). 置換規則('6','6'). 置換規則('7','7'). 置換規則('8','8'). 置換規則('9','9'). 'マッチした結果をそのまま置き換えるでなく、1つ前に改行を入れたい。'(_文字列,_置換された文字列) :- 検索文字列を置換する(_文字列,_前文字列,_置換文字列,_後文字列), 後文字列も置換して置換された文字列を生成する(_前文字列,_置換文字列,_後文字列,_置換された文字列),!. 'マッチした結果をそのまま置き換えるでなく、1つ前に改行を入れたい。'(_文字列,_文字列). 後文字列も置換して置換された文字列を生成する(_前文字列,_置換文字列,_後文字列,_置換された文字列) :- 'マッチした結果をそのまま置き換えるでなく、1つ前に改行を入れたい。'(_後文字列,_置換された文字列_2), atomic_list_concat([_前文字列,'\n',_置換文字列,_置換された文字列_2],_置換された文字列). 検索文字列を置換する(_文字列,_前文字列,_置換文字列_1,_後文字列) :- 検索文字列を得る(_文字列,_前文字列,_検索文字列,_後文字列), 置換規則(_検索文字列,_置換文字列_1). 検索文字列を得る(_文字列,_前文字列,_検索文字列,_後文字列) :- sub_atom(_文字列,S,Len,R,_検索文字列), sub_atom(_文字列,0,S,_,_前文字列), sub_atom(_文字列,_,R,0,_後文字列). % 以下のサイトは # 出題: http://toro.2ch.net/test/read.cgi/tech/1387257592/395 # ●Regular Expressionの使用環境 # JavaScript # # ●検索か置換か? # 置換 # # ●説明 # 同じ文字の4回以上の繰り返しを3回にしたい # # ●対象データ # ああああああああああああああああああいいいいいいいいいいいいいいいうえおおおおおおおおおおおおおお # # ●希望する結果 # あああいいいうえおおお 同じ文字の4回以上の繰り返しを3回にしたい(_文字列,_置換した文字列) :- atom_chars(_文字列,Chars_1), ならびの同じ文字要素のm回以上の繰り返しをn回にしたい(Chars_1,4,3,Chars_2), atom_chars(_置換した文字列,Chars_2). ならびの同じ文字要素のm回以上の繰り返しをn回にしたい([],_,_,[]). ならびの同じ文字要素のm回以上の繰り返しをn回にしたい(L1,_m,_n,L2) :- ならびの同じ文字要素のm回以上の繰り返しをn回にしたい(L1,_m,_n,R1,L_n), ならびの同じ文字要素のm回以上の繰り返しをn回にしたい(R1,_m,_n,R2_2), append(L_n,R2_2,L2),!. ならびの同じ文字要素のm回以上の繰り返しをn回にしたい([A|R1],_m,_n,[A|R2]) :- ならびの同じ文字要素のm回以上の繰り返しをn回にしたい(R1,_m,_n,R2). ならびの同じ文字要素のm回以上の繰り返しをn回にしたい(R1,_m,_n,R1_2,L_n) :- length(L_m,_m), length(L_n,_n), all(L_m,A), all(L_n,A), append(L_m,R1_2,R1). % 以下のサイトは # ●Regular Expressionの使用環境 # サクラエディタ 2.1.1.1 # # ●検索か置換か? # 置換 # # ●説明 # []内の文字だけにしたい # ※ [ と ] と (半角スペース)の3つを消したい # # ●対象データ # [あいうえお] ←最後に半角スペースあり(以下同じ) # [カキクケコ] # [AIUEO] # [漢字等々] # # ●希望する結果 # あいうえお←最後の半角スペースも消したい(以下同じ) # カキクケコ # AIUEO # 漢字等々 '[]内の文字だけとしたい'(_文字列,_変換されたデータ) :- '[]内の文字だけとしたい'(_文字列,S1,S2_2,S3), '[]内の文字だけにしたい'(S3,S3_2), atomic_list_concat([S1,S2_2,S3_2],_変換されたデータ),!. '[]内の文字だけとしたい'(_文字列,_文字列). '[]内の文字だけとしたい'(_文字列,S1,S2_2,S3) :- sub_atom(_文字列,S1,S2,S3,L1,L2,L3), sub_atom(S2,0,1,_,'['), sub_atom(S2,_,1,0,']'), '[]とスペースを削除する'(S2,S2_2),!. '[]とスペースを削除する'(S2,S2_2) :- '[]を削除する'(S2,S2_1), スペースを削除する(S2_1,S2_2). '[]を削除する'(S2,S2_1) :- sub_atom(S2,1,_,1,S2_2). スペースを削除する(S2_1,S2_2) :- findall(A,( スペースでない文字を取り出す(S2_1,A)), L), atom_chars(S2_2,L). スペースでない文字を取り出す(S2,A) :- sub_atom(S2,_,1,_,A), \+(A = ' ')). % 以下のサイトは # twitter_by_@dll7_20140324 # @dll7 29分 # 正規表現で # AXAYAZ # BXBYBZ # CXCYZC # のA B Cがマッチするように書くには何が一番楽? # ただし、 # AXBYCZ # BXAYAZ # とかはマッチしないようにする。三つ同じ時だけマッチしたいとき '正規表現で AXAYAZ BXBYBZ CXCYZC のA B Cがマッチするように書くには何が一番楽?'(_文字列,_検索文字) :- 文字候補(_文字列,_検索文字), findall(_,sub_atom(_文字列,_,1,_,_検索文字),[_,_,_]). 文字候補(_文字列,_文字) :- setof(_文字,一文字ずつ取り出す(_文字列,_文字),_文字ならび), member(_文字,_文字ならび). 一文字ずつ取り出す(_文字列,_文字) :- sub_atom(_文字列,_,1,_,_文字). % 以下のサイトは # 出題: http://toro.2ch.net/test/read.cgi/tech/1387257592/395 # ●Regular Expressionの使用環境 # JavaScript # # ●検索か置換か? # 置換 # # ●説明 # 同じ文字の4回以上の繰り返しを3回にしたい # # ●対象データ # ああああああああああああああああああいいいいいいいいいいいいいいいうえおおおおおおおおおおおおおお # # ●希望する結果 # あああいいいうえおおお 同じ文字の4回以上の繰り返しを3回にしたい(_文字列,_置換した文字列) :- atom_chars(_文字列,Chars_1), ならびの同じ文字要素の4回以上の繰り返しを3回にしたい(Chars_1,Chars_2), atom_chars(_置換した文字列,Chars_2). ならびの同じ文字要素の4回以上の繰り返しを3回にしたい([],[]). ならびの同じ文字要素の4回以上の繰り返しを3回にしたい([A,A,A,A|R1],[A,A,A|R2]) :- ならびの先頭からの指定要素を読み飛ばす(R1,A,R1_1), ならびの同じ文字要素の4回以上の繰り返しを3回にしたい(R1_1,R2),!. ならびの同じ文字要素の4回以上の繰り返しを3回にしたい([A|R1],[A|R2]) :- ならびの同じ文字要素の4回以上の繰り返しを3回にしたい(R1,R2),!. ならびの先頭からの指定要素を読み飛ばす([],_,[]) :- !. ならびの先頭からの指定要素を読み飛ばす([A|R],B,[A|R]) :- \+(A = B),!. ならびの先頭からの指定要素を読み飛ばす([A|R1],A,R2) :- ならびの先頭からの指定要素を読み飛ばす(R1,A,R2). % 以下のサイトは # ●Regular Expressionの使用環境 # # # ●検索か置換か? # 置換 # # ●説明 # 複数行の空行を1つの空行にしたい # # ●対象データ # # # # # # ●希望する結果 # 複数行の空行を1つの空行にしたい(_ファイル) :- get_chars(_ファイル,_文字ならび), 複数行の空行を1つの空行にしたい(_行ならび,_複数の空行を1つの空行にした文字ならび), put_chars(_ファイル,_複数の空行を1つの空行にした文字ならび). 複数行の空行を1つの空行にしたい([],[]). 複数行の空行を1つの空行にしたい(['\n','\n'|_残り行ならび],_複数の空行を1つの空行にした行ならび) :- 複数行の空行を1つの空行にしたい(['\n'|_残り行ならび],_複数の空行を1つの空行にした行ならび),!. 複数行の空行を1つの空行にしたい([A|R1],[A|R2]) :- 複数行の空行を1つの空行にしたい(R1,R2),!. get_chars(_ファイル,_文字ならび) :- open(_ファイル,read,Instream), findall(_文字,( at_end_of_stream(Instream),!,fail; get_char(Instream,_文字))), _文字ならび), close(Instream). put_chars(_ファイル,_文字ならび) :- open(_ファイル,write,Outstream), append(_,[_文字|R],_文字ならび), putchar(Outstream,_文字), R = [], close(Outstream). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1387257592/351 # ●Regular Expressionの使用環境 # サクラエディタ # # ●検索か置換か? # 置換 # # ●説明 # Exampleの文字列を含まない行を削除したい # # ●対象データ # ABCA Test # BCAA Example # CABA Abc # # ●希望する結果 # BCAA Example # # # ネットで検索して出てきた^(?!.*Example).+$や^((?!Example).)*$ # で試したんですが空行が残ってしまいました # # 'Exampleの文字列を含まない行を削除したい'(_文字列,_Exampleの文字列を含まない行を削除された文字列) :- 改行記号付きの行ならびを得る(_文字列,_改行記号付きの行ならび), findall(_行,( member(_行,_文字列ならび), \+(sub_atom(_行,_,_,_,'Example'))), _Exampleの文字列を含まない行を削除された行ならび), atomic_list_concat(_Exampleの文字列を含まない行を削除された行ならび,_Exampleの文字列を含まない行を削除された文字列). 改行記号付きの行ならびを得る('',[]) :- !. 改行記号付きの行ならびを得る(_文字列,[_改行記号付き行|R]) :- 改行記号を含む行を得る(_文字列,_改行記号付き行,_残り文字列), 改行記号付きの行ならびを得る(_残り文字列,R). 改行記号を含む行を得る(_文字列,_改行記号付き行,_残り文字列) :- sub_atom(_文字列,S,1,R,'\n'), sub_atom(_文字列,0,_,R,_改行記号付き行), sub_atom(_文字列,_,R,0,_残り文字列),!. 改行記号を含む行を得る(_文字列,_文字列,''). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1387257592/263 # ●Regular Expressionの使用環境 # Javascript # # ●検索か置換か? # 置換 # # ●説明 # '1'を含まないABCからDEFまでを削除したいです # # ●対象データ # ABC # 1 # DEF # # ABC # 2 # DEF # # ABC # 3 # DEF # # ●希望する結果 # ABC # 1 # DEF # # '''1''を含まないABCからDEFまでを削除したいです'(_文字列,_希望する結果) :- atom_char(_文字列,_文字ならび), '''1''を含まない''A'',''B'',''C''から''D'',''E'',''F''までをならびから削除したいです'(_文字ならび,L), atomic_list_concat(L,_希望する結果). '''1''を含まない''A'',''B'',''C''から''D'',''E'',''F''までをならびから削除したいです'([],[]). '''1''を含まない''A'',''B'',''C''から''D'',''E'',''F''までをならびから削除したいです'(_文字ならび,L) :- '''1''を含まない''A'',''B'',''C''から''D'',''E'',''F''までを'(_文字列,L3), '''1''を含まない''A'',''B'',''C''から''D'',''E'',''F''までをならびから削除したいです'(L3,L),!. '''1''を含まないABCからDEFまでを削除したいです'([A|R1],[A|R2]) :- '''1''を含まない''A'',''B'',''C''から''D'',''E'',''F''までをならびから削除したいです'(R1,R2). '''1''を含まない''A'',''B'',''C''から''D'',''E'',''F''までを'(_文字列,L3) :- append(['A','B','C'|L2],['D','E','F'|L3],_文字ならび), \+(append(_,['A','B','C'|_],L2)), \+(append(_,['D','E','F'|_],L2)), \+(append(_,['1'|_],L2)),!. % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1387257592/189 # ●Regular Expressionの使用環境 # ruby # # ●検索か置換か? # 置換 # # ●説明 # 行中の改行を削除したい # 以下でやると改行だけでなく改行の前の一文字も何故か消えてうまくいきません # 対象データの場合は「元」が消えてしまいます # # ruby -e 'puts open("input.txt").read.gsub(/[^。¥n]¥n/,"")' > output.txt # # ●対象データ # こんにちはお元 # 気ですか。 # 私は元気です。 # # ●希望する結果 # こんにちはお元気ですか。 # 私は元気です。 # # 文字列中の改行を削除したい(_文字列,_改行を削除された文字列) :- findall(_文字,( sub_atom(_文字列,_,1,_,_文字), \+(_文字 = '\n')), _改行を削除された文字ならび), atomic_list_concat(_改行を削除された文字ならび,_改行を削除された文字列). % 以下のサイトは # 出題場所 http://toro.2ch.net/test/read.cgi/tech/1363769640/325 # xyz を含まないものにマッチする正規表現 # # [regexp 60]より # # |fmcat =(retofm <<<'(x+y+z+a)*xyz(x+y+z+a)*'|fmcment) =(retofm <<<'xyz')|fmdeterm|fmmin|fmtore|perl -pe 'y/+/|/; s/a/[^xyz]/g' # |として、 # |([^xyz]|y|z)*x(z([^xyz]|y|z)*x|[^xyz]([^xyz]|y|z)*x|x|yx|y[^xyz]([^xyz]|y|z)*x|yy([^xyz]|y|z)*x)*yz # # 遷移図は # # x # <-----------+ # [^x] | x | # <----+ <----+ | # | | | | | # \/ x \/ y | z # 0 ----> 1 ----> 2 ----> 3(DEAD) # | | | # | [^xy] | | # <----------+ | # | [^xz] | # <--------------------- # # 「xyz を含まない文字列」の答は、 # # ([^x]|x(y?x)*([^xy]|y[^xz]))*(x(y?x)*x?)? # # (x(y?x)*x?)? の部分はこの場合に限り (x|y)* で代用できるかな # 後、つるかめ算の様に「勘」で書いたのが # # [^x]*(x+(y|y[^xz][^x]*|[^xy][^x]*))* # # ですがちょっと自信無し # 'xyz を含まないものにマッチする'(_文字列,_副文字列) :- sub_atom(_文字列,_,Len,_,_副文字列), Len > 0, \+(sub_atom(_副文字列,_,_,_,xyz)). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1387257592/14 # ●Regular Expressionの使用環境 # Perl # # ●検索か置換か? # 検索 # # ●説明 # ミドルネームを含む名前も、ミドルネームを含まない名前も分解して抽出したい # また、名前の区切りはスペースやドットなど色々なものに対応したい # # ●対象データ # Edward Snowden # Edward.Joseph.Snowden # エドワード・スノーデン # エドワード=ジョセフ=スノーデン # # ●希望する結果 # (値を入れているわけではなく、$1〜$3に入っていて欲しいものです) # $1 = "Edward"   $2 = ""   $3 = "Snowden" # $1 = "Edward"   $2 = "Joseph"   $3 = "Snowden" # $1 = "エドワード"   $2 = ""   $3 = "スノーデン" # $1 = "エドワード"   $2 = "ジョセフ"   $3 = "スノーデン" # # 'ミドルネームを含む名前も、ミドルネームを含まない名前も分解して抽出したい また、名前の区切りはスペースやドットなど色々なものに対応したい'(_名前,_ファーストネーム,_ミドルネーム,_ラストネーム) :- split(_名前,[' ','.','=','・','='],L), 名前の分解(L,_ファーストネーム,_ミドルネーム,_ラストネーム). 名前の分解([_ファーストネーム,_ラストネーム],_ファーストネーム,'',_ラストネーム) :- !. 名前の分解([_ファーストネーム,_ミドルネーム,_ラストネーム],_ファーストネーム,_ミドルネーム,_ラストネーム). % 以下のサイトは # 出題場所 http://toro.2ch.net/test/read.cgi/tech/1387257592/131 # すいません。VBScriptで # 抽出した文字列にダブりがあります。 # 例: # AAA # BBB # AAA # CCC # BBB # CCC # これを # AAA # BBB # CCC # のように抽出し直すにはどうすればいいでしょうか? '抽出した文字列にダブりがあります。\\n例:\\nAAA\\nBBB\\nAAA\\nCCC\\nBBB\\nCCC\\nこれを\\nAAA\\nBBB\\nCCC\\nのように抽出し直すにはどうすればいいでしょうか?'(_文字列ならび,_抽出し直した文字列ならび) :- findall(_文字列,( append(L1,[_文字列|R],_文字列ならび), \+(member(_文字列,L1))), _抽出し直した文字列ならび). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1362913813/854 # ●Regular Expressionの使用環境 # Becky! Internet Mail Ver.2 # # ●検索か置換か? # 検索 # # ●説明 # +0900を含まないものを検索したい # # ●対象データ # +0900 # +0500 # +0630 # # ●希望する結果 # +0500 # +0630 # # よろしくお願いします。 # # '+0900を含まないものを検索したい'(_文字列) :- get_lines(Lines), '+0900を含まないものを検索したい'(Lines,_文字列). '+0900を含まないものを検索したい'(Lines,_文字列) :- member(_文字列,Lines), '+0900を含まないものを'(_文字列). '+0900を含まないものを'(_文字列) :- \+(sub_atom(_文字列,_,_,_,'+0900')). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1362913813/844 # たぶんやりたいことはこうだろう。数字以外の文字が1文字でもあればエラーを出す。# # [[ "$A" =~ [^0-9] ]] && echo "not number" # 数字以外の文字が1文字でもあればエラーを出す(_文字列) :- forall(sub_atom(_文字列,_,1,_,A),member(A,['0','1','2','3','4','5','6','7','8','9'])). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1362913813/843 # ^[^0-9]+$ は数字以外だけの文字列の場合ヒット、数字混じりだと絶対ヒットしない '数字以外だけの文字列の場合ヒット、数字混じりだと絶対ヒットしない '(_文字列) :- forall(sub_atom(_文字列,_,1,_,A),\+(member(A,['0','1','2','3','4','5','6','7','8','9']))). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1362913813/843 # ^[^0-9]+$ は数字以外だけの文字列の場合ヒット、数字混じりだと絶対ヒットしない '数字以外だけの文字列の場合ヒット、数字混じりだと絶対ヒットしない '(_文字列) :- \+((sub_atom(_文字列,_,1,_,A),member(A,['0','1','2','3','4','5','6','7','8','9']))). % 以下のサイトは # 出題場所 # # ●Regular Expressionの使用環境 # Python3.3 # # ●検索か置換か? # 置換 # # ●説明 # 均等割りにしているスペースを削除したい # 一文字ずつスペースが入っている文字のスペースを削除したい # # ●対象データ # あ い う え お # かき くけ ここ # # ●希望する結果 # あいうえお # かき くけ ここ # '一文字ずつスペースが入っている文字列のスペースを削除したい'(_文字列,_スペースを削除された文字列) :- atom_chars(_文字列,_文字ならび), '一文字ずつスペースが入っている文字ならびのスペースを削除したい'(_文字ならび,_スペースを削除された文字ならび), atom_chars(_スペースを削除された文字列,_スペースを削除された文字ならび). '一文字ずつスペースが入っている文字ならびのスペースを削除したい'([_文字],[_文字]) :- \+(_文字=' '). '一文字ずつスペースが入っている文字ならびのスペースを削除したい'([_文字,' '|R1],[_文字|R2]) :- '一文字ずつスペースが入っている文字ならびのスペースを削除したい'(R1,R2). % 以下のサイトは # 出題場所 # # ●Regular Expressionの使用環境 # Python3.3 # # ●検索か置換か? # 置換 # # ●説明 # 均等割りにしているスペースを削除したい # 一文字ずつスペースが入っている文字のスペースを削除したい # # ●対象データ # あ い う え お # かき くけ ここ # # ●希望する結果 # あいうえお # かき くけ ここ # 均等割りにしているスペースを削除したい(_文字列,_均等割文字列長さ,_スペースを削除した文字列) :- 均等割文字列(_文字列,_均等割文字列長さ,_均等割文字列ならび), atomic_list_concat(_均等割文字列ならび,_スペースを削除した文字列). 均等割文字列(_文字列,_均等割文字列長さ,[_文字列]) :- '文字列が均等割文字長さであり、構成する文字全てがスペースではない'(_文字列,_均等割文字列長さ). 均等割文字列(_文字列,_均等割文字列長さ,[_前文字列|R]) :- 均等割副文字列を得る(_文字列,_前文字列,_スペース文字列,_後文字列,_均等割文字列長さ), 均等割文字列(_後文字列,_均等割文字列長さ,R). '文字列が均等割文字長さであり、構成する文字全てがスペースではない'(_文字列,_均等割文字列長さ) :- 文字列を構成する文字全てがスペースではない(_文字列), atom_length(_文字列,_均等割文字列長さ). 均等割副文字列を得る(_文字列,_前文字列,_スペース文字列,_後文字列,_均等割文字列長さ) :- '前文字列・スペース文字列・後文字列候補'(_文字列,_前文字列,_スペース文字列,_後文字列,_均等割文字列長さ), '前文字列は空文字でなく全て文字、スペース文字列は空文字でなく全てスペース'(_前文字列,_スペース文字列), 後文字列の先頭文字はスペースではない(_後文字列). '前文字列・スペース文字列・後文字列候補'(_文字列,_前文字列,_スペース文字列,_後文字列,_均等割文字列長さ) :- sub_atom(_文字列,_均等割文字列長さ,_,R,_スペース文字列), sub_atom(_文字列,0,_均等割文字列長さ,_,_前文字列), sub_atom(_文字列,_,R,0,_後文字列). '前文字列は空文字でなく全て文字、スペース文字列は空文字でなく全てスペース'(_前文字列,_スペース文字列) :- 前文字列は空文字でなく全て文字(_前文字列), スペース文字列は空文字でなく全てスペース(_スペース文字列). 前文字列は空文字でなく全て文字(_前文字列) :- 空文字ではなく(_前文字列), 文字列を構成する文字全てがスペースではない(_前文字列). スペース文字列は空文字でなく全てスペース(_スペース文字列) :- 空文字ではなく(_スペース文字列), 文字列を構成する文字全てがスペースである(_スペース文字列). 空文字ではなく(_文字列) :- \+(_文字列=''). 後文字列の先頭文字はスペースではない(_後文字列) :- \+(sub_atom(_後文字列,0,1,_,' ')). 文字列を構成する文字全てがスペースではない(_文字列) :- forall(sub_atom(_文字列,_,1,_,_文字),\+(_文字=' ')). 文字列を構成する文字全てがスペースである(_文字列) :- forall(sub_atom(_文字列,_,1,_,_文字),_文字=' '). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/779 # # ●Regular Expressionの使用環境 # Perl(Emeditor) # # ●検索か置換か? # 検索 # # ●説明 # 各行の1番目のAまでを検索したい # # ●対象データ # お肉料理 # お魚料理 # 料理 # # # ●希望する結果 # 3行目の"料理"のみマッチさせたいです。 '各行の1番目のAまでを検索したい。ただし前部に忌避する連接した語が存在します。'(_文字列,_A,_前文字列,_A,_後文字列) :- sub_atom(_文字列,_前文字列,_A,_後文字列), forall(忌避する連接した語(_A,_忌避する連接した語),\+(sub_atom(_前文字列,_,_,0,_忌避する連接した語))),!. 忌避する連接した語(料理,お肉). 忌避する連接した語(料理,お魚). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/779 # # ●Regular Expressionの使用環境 # Perl(Emeditor) # # ●検索か置換か? # 検索 # # ●説明 # 各行の1番目のAまでを検索したい # # ●対象データ # お肉料理 # お魚料理 # 料理 # # # ●希望する結果 # 3行目の"料理"のみマッチさせたいです。 # '各行の1番目のAまでを検索したい。ただし前部に忌避する連接した語が存在します。'(_文字列,_A,_前文字列,_A,_後文字列) :- sub_atom(_文字列,S,Len,R,_A), sub_atom(_文字列,0,S,0,_前文字列), forall(忌避する連接した語(_A,_忌避する連接した語),\+(sub_atom(_前文字列,_,_,0,_忌避する連接した語))), sub_atom(_文字列,_,R,0,_後文字列). 忌避する連接した語(料理,お肉). 忌避する連接した語(料理,お魚). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/758 # # あるシステムにデバイスのシリアルを登録するのですが、シリアルに半角スペースが入っていると正常に登録ができません。 # 正規表現が使えるようなので、質問ですが、下記のシリアルを正規表現で表記するにはどう表記すれば良いでしょうか。 # # 上記シリアルは二つの文字列間に半角スペースが12個含んでいます。 # よろしくお願いします。 '二つの文字列間に半角スペースが12個含んでいます。'(_文字列,_一つ目の文字列,_二つ目の文字列) :- sub_atom(_文字列,_一つ目の文字列,' ',_二つ目の文字列,[A|L1],L2,[B|L3]), \+(member(' ',[A|L1])), \+(member(' ',[B|L3])). sub_atom(A,H,X,T,HL,XL,TL) :- sub_atom(A,_,_,_,H,X,T,HL,XL,TL). % 以下のサイトは # wshのjscriptで # abc123def456 # これのcと1の間とfと4の間だけに一致させる方法ないですかね? # "abc123def456".splitに投げたら["abc", "123def", "456"]が返ってくるのが理想です 'wshのjscriptで abc123def456 これのcと1の間とfと4の間だけに一致させる方法ないですかね? "abc123def456".splitに投げたら["abc", "123def", "456"]が返ってくるのが理想です'(_文字列,_区切られた文字列ならび) :- '文字列の_文字1と_文字2の間と_文字3と_文字4の間だけに一致させる方法ないですかね?'('abc123def456',c,'1',f,'4',_区切りられた文字列ならび). '文字列の_文字1と_文字2の間と_文字3と_文字4の間だけに一致させる方法ないですかね?'(_文字列,_文字1,_文字2,_文字3,_文字4,_区切られた文字列ならび) :- sub_atom(_文字列,_,_対象とする副文字列,_), findall(_区切り候補,( 対象とする副文字列_文字1と_文字2の間と_文字3と_文字4の間だけに一致させる(_対象とする副文字列,_区切り候補)), _区切り候補ならび), sPLIT(_文字列,_区切り候補ならび,_区切られた文字列ならび). 対象とする副文字列の_文字1と_文字2の間と_文字3と_文字4の間だけに一致させる(_対象とする副文字列,_文字1,_文字2,_文字3,_文字4,_区切り候補) :- 先頭文字と末尾文字の間の文字列(_対象とする副文字列,_文字1,_文字2,_区切り候補). 対象とする副文字列の_文字1と_文字2の間と_文字3と_文字4の間だけに一致させる(_対象とする副文字列,_文字1,_文字2,_文字3,_文字4,_区切り候補) :- 先頭文字と末尾文字の間の文字列(_対象とする副文字列,_文字3,_文字4,_区切り候補). 先頭文字と末尾文字の間の文字列(_対象とする副文字列,_先頭文字,_末尾文字,_先頭文字と末尾文字の間の文字列) :- sub_atom(_対象とする副文字列,0,1,_,_先頭文字), sub_atom(_対象とする副文字列,_,1,0,_末尾文字), sub_atom(_対象とする副文字列,1,_,1,_先頭文字と末尾文字の間の文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/689 # # ●Java1.5 # ●検索 # ●真ん中のAを否定 かつ Aが含まれる にマッチするか # # ●対象データ 3桁限定 # ABC true # BAC false # CBA true # DEF false # # .*1.* & ^.[^9].* # こんな正規を使ったのですができませんでした。 # 宜しくお願いします。 # # '真ん中のAを否定 かつ Aが含まれる にマッチするか(対象データ 3桁限定)'(_対象データ,_A) :- '真ん中のAを否定(対象データ 3桁限定)'(_対象データ,_A), 'Aが含まれる(対象データ 3桁限定)'(_対象データ,_A). '真ん中のAを否定(対象データ 3桁限定)'(_対象データ,_A) :- \+(sub_atom(_対象データ,1,1,1,_A)). 'Aが含まれる(対象データ 3桁限定)'(_対象データ,_A) :- sub_atom(_対象データ,_,1,_,_A). % 以下のサイトは # # ●Regular Expressionの使用環境 # Visual C# # # ●検索か置換か? # 検索 # # ●説明 # 同じ文字が5回以上繰り返されている箇所のある行を検索したい # # ●対象データ→結果 # うわあああああい → マッチ # aaaaaaaa      → マッチ # あいあいあい   → マッチせず # 同じ文字が5回以上繰り返されている箇所のある行を検索したい(_文字列,_行) :- split(_文字列,['\n'],_行ならび), 同じ文字が5回以上繰り返されている箇所のある行ならびを検索する(_行ならび,_行). 同じ文字が5回以上繰り返されている箇所のある行ならびを検索する(_行ならび,_行) :- nth1(_,_行ならび,_行), 同じ文字が5回以上繰り返されている箇所のある行(_行). 同じ文字が5回以上繰り返されている箇所のある行(_文字列) :- sub_atom(_文字列,_,5,_,_適合文字列), atom_chars(_適合文字列,[A,A,A,A,A]),!. % 以下のサイトは # "0000000000"のような文字列を用意しておいて、"123" のような # 任意の文字列を"0000000123"のように置き換えるのって簡単にできますか? # 置き換える方の文字列は3桁じゃなくて、いろんな数字があり得ます。 # # C言語でいうsprintf(%10d, 123)みたいなフォーマットを正規表現で簡単に # 再現できますか? '"0000000000"のような文字列を用意しておいて、"123" のような 任意の文字列を"0000000123"のように置き換えるのって簡単にできますか? 置き換える方の文字列は3桁じゃなくて、いろんな数字があり得ます。'(_置換対象文字列,_置換文字列,_置換された文字列) :- atom_length(_置換文字列,_文字長), sub_atom(_置換対象文字列,S1,S2,S3), atom_length(S2,_文字長), atomic_list_concat([S1,_置換文字列,S3],_置換された文字列). % *** user: sub_atom / 4 *** sub_atom(A,H,X,T) :- atomic(X), atom_chars(A,L), atom_chars(X,XL), sub_atom_2(L,S,Len,R,HL,XL,TL), atom_chars(H,HL), atom_chars(X,XL), atom_chars(T,TL). sub_atom(A,H,X,T) :- var(X), atom_chars(A,L), sub_atom_2(L,S,Len,R,HL,XL,TL), atom_chars(H,HL), atom_chars(X,XL), \+(XL = []), atom_chars(T,TL). % 以下のサイトは # いろいろな環境の中には、先読みの否定である (?! ) が # 使えない環境があります。 このような環境では、 # 「ABC」 という文字列を含まない # というような、文字列の否定をする正規表現を作るのは # とても難しい作業になります # ※ (?! ) が使える環境での作り方は こちら 。 # # では、例として、 # 以下のようなテキストにマッチする正規表現を考えてみましょう★ # ・ テキストの先頭が AA から始まる # ・ テキストの末尾が AA で終わる # ・ 先頭の AA と、末尾の AA との間に挟まれた文字列の中にはAA が存在しない # '・ テキストの先頭が AA から始まる ・ テキストの末尾が AA で終わる ・ 先頭の AA と、末尾の AA との間に挟まれた文字列の中にはAA が存在しない'(_テキスト) :- sub_atom(_テキスト,'AA',S2,'AA',_,_,_), \+(sub_atom(S2,_,_,_,'AA')). %%%%%%%% sub_atom/7 %%%%%%%% sub_atom(A,H,X,T,HL,XL,TL) :- atom(A), atom_chars(A,Chars), append(HL,XL,TL,Chars), 'HL_XL_TL_H_X_T'(HL,XL,TL,H,X,T). 'HL_XL_TL_H_X_T'(HL,XL,TL,H,X,T) :- \+(XL=[]), atom_chars(H,HL), atom_chars(X,XL), atom_chars(T,TL). %%%%%%%% append/4 %%%%%%%% append([],L2,L3,L4) :- append(L2,L3,L4). append([U|L1],L2,L3,[U|L4]) :- append(L1,L2,L3,L4). % 以下のサイトは # いろいろな環境の中には、先読みの否定である (?! ) が # 使えない環境があります。 このような環境では、 # 「ABC」 という文字列を含まない # というような、文字列の否定をする正規表現を作るのは # とても難しい作業になります # ※ (?! ) が使える環境での作り方は こちら 。 # # では、例として、 # 以下のようなテキストにマッチする正規表現を考えてみましょう★ # ・ テキストの先頭が AA から始まる # ・ テキストの末尾が AA で終わる # ・ 先頭の AA と、末尾の AA との間に挟まれた文字列の中にはAA が存在しない # '・ テキストの先頭が AA から始まる ・ テキストの末尾が AA で終わる ・ 先頭の AA と、末尾の AA との間に挟まれた文字列の中にはAA が存在しない'(_テキスト) :- sub_atom(_テキスト,_,_,_,'AA',S2,'AA',_,_,_), \+(sub_atom(S2,_,_,_,'AA')). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% sub_atom(A,S,Len,R,H,X,T,HL,XL,TL) :- atomic(X), atom_chars(A,L), atom_chars(X,XL), subatom_2(L,S,Len,R,HL,XL,TL), atom_chars(H,HL), atom_chars(X,XL), atom_chars(T,TL). sub_atom(A,S,Len,R,H,X,T,HL,XL,TL) :- var(X), atom_chars(A,L), subatom_2(L,S,Len,R,HL,XL,TL), atom_chars(H,HL), atom_chars(X,XL), \+(XL = []), atom_chars(T,TL). sub_atom_2(L,S,Len,R,L1,XL,L2) :- append(L1,XL,L2,L), length_cut(L1,S), length_cut(L2,R), length_cut(XL,Len). length_cut(L,Len) :- length(L,Len),!. % 以下のサイトは # いろいろな環境の中には、先読みの否定である (?! ) が # 使えない環境があります。 このような環境では、 # 「ABC」 という文字列を含まない # というような、文字列の否定をする正規表現を作るのは # とても難しい作業になります # ※ (?! ) が使える環境での作り方は こちら 。 # # では、例として、 # 以下のようなテキストにマッチする正規表現を考えてみましょう★ # ・ テキストの先頭が AA から始まる # ・ テキストの末尾が AA で終わる # ・ 先頭の AA と、末尾の AA との間に挟まれた文字列の中にはAA が存在しない # # ちなみに、 # "AAAAA" というテキストの場合、中に挟まれた文字列が #  A の1文字だけなので、マッチするものとします # # ▽ マッチさせたいテキストの図 # # このような場合、 # まず、以下のように正規表現に使えそうなパーツを書き出します # ^AA ・・・ テキストの先頭にある AA にマッチする表現 # AA$ ・・・ テキストの末尾にある AA にマッチする表現 # A[^A] ・・・ ”A 1文字” の後ろに ”A以外の1文字” が #           あれば、この2文字にマッチする表現 # [^A]  ・・・ ”A以外の1文字” にマッチする表現 # (重要) A[^A] は 2文字 にマッチするということを忘れないで下さい # # ちなみに、 A[^A] と [^A] は以下のような関係になっています # ・ ある文字が A 以外ならば、 [^A] にマッチする # ・ ある文字が A であり、次の文字が A 以外ならば、 #  この2文字が A[^A] にマッチする # ・ ある文字が AA の A ならば、A[^A] にも [^A] にもマッチしない # # これを図にすると下のようになります # # ▽ A[^A] と [^A] の関係図 # # この図を見ると、ある文字にマッチさせるには、 # A[^A] または [^A] にマッチさせればいいことが分かります # # つまり、以下のようになります # (A[^A]|[^A]) # # そして、これを繰り返せば AA を含まない文字列となります # (A[^A]|[^A])* # # 最後に、 # テキストの先頭と末尾の AA にマッチする表現を付け足し、 # 以下のようにすれば完成・・のはずですね # ^AA(A[^A]|[^A])*AA$ # # では、試しに動かしてみましょう! # ※ テキストエディタの OtbEdit では ^ と $ が行頭、行末にも # マッチするので、1行につき1つのテキストをテストします # '・ テキストの先頭が AA から始まる ・ テキストの末尾が AA で終わる ・ 先頭の AA と、末尾の AA との間に挟まれた文字列の中にはAA が存在しない'(_テキスト) :- '・ テキストの先頭が AA から始まる'(_テキスト), '・ テキストの末尾が AA で終わる'(_テキスト), '・ 先頭の AA と、末尾の AA との間に挟まれた文字列の中にはAA が存在しない'(_テキスト). '・ テキストの先頭が AA から始まる'(_テキスト) :- sub_atom(_テキスト,0,_,_,'AA'). '・ テキストの末尾が AA で終わる'(_テキスト) :- sub_atom(_テキスト,_,_,0,'AA'). '・ 先頭の AA と、末尾の AA との間に挟まれた文字列の中にはAA が存在しない'(_テキスト) :- '・ 先頭の AA と、末尾の AA との間に挟まれた文字列'(_テキスト,_先頭のAAと末尾のAAとの間に挟まれた文字列), 'の中にはAA が存在しない'(_先頭のAAと末尾のAAとの間に挟まれた文字列). '・ 先頭の AA と、末尾の AA との間に挟まれた文字列'(_テキスト,_先頭のAAと末尾のAAとの間に挟まれた文字列) :- sub_atom(_テキスト,0,Len1,_,'AA'), sub_atom(_テキスト,_,Len2,0,'AA'), sub_atom(_テキスト,Len1,_,Len2,_先頭のAAと末尾のAAとの間に挟まれた文字列). 'の中にはAA が存在しない'(_先頭のAAと末尾のAAとの間に挟まれた文字列) :- \+(sub_atom(_先頭のAAと末尾のAAとの間に挟まれた文字列,_,_,_,'AA')). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/535 # # "123,456,789"から","だけを削除して"123456789"にするにはどうすればいいの? # 前後が数字になっている","だけにマッチするのって正規表現だけでできるの? # "[0-9],[0-9]だと前後の数字にもマッチしちゃうよね。 '"123,456,789"から","だけを削除して"123456789"にするにはどうすればいいの? 前後が数字になっている","だけにマッチするのって正規表現だけでできるの? "[0-9],[0-9]だと前後の数字にもマッチしちゃうよね。'(_文字列,_カンマを削除した文字列) :- 文字列からアラビア数字に囲まれたカンマを削除する(_文字列,_カンマを削除した文字列). 文字列からアラビア数字に囲まれたカンマを削除する(_文字列,_カンマを削除した文字列) :- sub_atom(_文字列,_開始点,_検索語の長さ,_残り長さ,S1,',',S3,L1,L2,L3),!, 検索語の前後はアラビア数字である(_文字列,_開始点,_検索語の長さ), 文字列からアラビア数字に囲まれたカンマを削除する(S1,S3,_カンマを削除した文字列). 文字列からアラビア数字に囲まれたカンマを削除する(S1,S3,_カンマを削除した文字列) :- atomic_list_concat([S1,S3],_カンマを削除した文字列). 文字列からアラビア数字に囲まれたカンマを削除する(S1,S3,_カンマを削除した文字列) :- 文字列からアラビア数字に囲まれたカンマを削除する(S3,_カンマを削除した文字列_2), atomic_list_concat([S1,_カンマを削除した文字列_2],_カンマを削除した文字列). 検索語の前後はアラビア数字である(_文字列,_開始点,_検索語の長さ) :- 検索語の前はアラビア数字である(_文字列,_開始点), 検索語の後はアラビア数字である(_文字列,_開始点,_検索語の長さ). 検索語の前はアラビア数字である(_文字列,_開始点) :- _開始点_1 is _開始点 - 1, sub_atom(_文字列,_開始点_1,1,_,A), アラビア数字(A). 検索語の後はアラビア数字である(_文字列,_開始点,_検索語の長さ) :- _開始点_2 is _開始点 + _検索語の長さ, sub_atom(_文字列,_開始点_2,1,_,A), アラビア数字(A). アラビア数字('0'). アラビア数字('1'). アラビア数字('2'). アラビア数字('3'). アラビア数字('4'). アラビア数字('5'). アラビア数字('6'). アラビア数字('7'). アラビア数字('8'). アラビア数字('9'). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/419 # # ●Regular Expressionの使用環境 # sakura editor # # ●検索か置換か? # 置換 # # ●説明 # xmlのtaxiwaypath要素のなかに # type="TAXI"と centerLineLighted="FALSE"が存在するときに、 他の属性を書き換えずにcenterLineLighted="TRUE"に書き換えたいです # # ●対象データ # <TaxiwayPath # type="TAXI" # … # centerLineLighted="FALSE" # … # /> # # ●希望する結果 # <TaxiwayPath # type="TAXI" # … # centerLineLighted="TRUE" # … # /> # # …は省略していると言う意味です # # ' までの間に type="TAXI" とcenterLineLighted="FALSE" が存在する時、centerLineLighted="FALSE" を centerLineLighted="TRUE" に置換する'(_文字列,_置換された文字列) :- sPLIT(_文字列,['>',' ','\n','\t'],_区切りを含む要素ならび), ' までの間に type="TAXI" とcenterLineLighted="FALSE" が存在する時、centerLineLighted="FALSE" を centerLineLighted="TRUE" にする'(R2,R2_2), atomic_list_concat(_置換された区切りを含む要素ならび,_置換された文字列),!. ' までの間に type="TAXI" とcenterLineLighted="FALSE" が存在する時、centerLineLighted="FALSE" を centerLineLighted="TRUE" に置換する'(_文字列,_文字列). ' までの間に type="TAXI" とcenterLineLighted="FALSE" が存在する時、centerLineLighted="FALSE" を centerLineLighted="TRUE" に置換する'(R2,_置換された区切りを含む要素ならび) :- append(L1,[''|R3],_区切りを含む要素ならび), \+(member('>',R2)), member('type="TAXI"',R2), ならびの置換(R2,'centerLineLighted="FALSE"','centerLineLighted="TRUE"',R2_2), append(L1,[''|R3],_置換された区切りを含む要素ならび),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/413 # # ああもう訳が分からない # # あいうえおあいうえおあいうえお # # という「あいうえお」の繰り返し文字があったら # 1番最後の「うえ」だけ一致させる方法と # 2番目の「うえ」だけ一致させる方法が解らない # それぞれどういう方法があるんでしょうか? # すみません教えて下さい '1番最後の「うえ」だけ一致させる方法'(_文字列,_前文字列,うえ,_後文字列) :- sub_atom(_文字列,S,2,R,うえ), 前文字列と後文字列を得る(_文字列,S,R,_前文字列,_後文字列), \+(sub_atom(_後文字列,_,2,_,うえ)). '2番目の「うえ」だけ一致させる方法'(_文字列,_前文字列,うえ,_後文字列) :- '2番目の「うえ」だけ一致させる'(_文字列,S_2,R_2), 前文字列と後文字列を得る(_文字列,S_2,R_2,_前文字列,_後文字列). '2番目の「うえ」だけ一致させる'(_文字列,S_2,R_2) :- sub_atom(_文字列,S_1,2,_,うえ), sub_atom(_文字列,S_2,2,R_2,うえ), S_2 > S_1,!. 前文字列と後文字列を得る(_文字列,S,R,_前文字列,_後文字列) :- sub_atom(_文字列,0,S,_,_前文字列), sub_atom(_文字列,_,R,0,_後文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/397 # # 質問です # # ●正規表現の使用環境 # PHP5.3.3 # # ●検索か置換か? # 置換 # # ●説明 # ・URLが含まれていたときに、jpg,png,gifならimgタグへ変換。 # ・それ以外ならaタグへ変換。 # ・URLに日本語が含まれていた場合も、スペースや改行、文字列の終端にくるまでのものも上記のようにリンク化 # # ●対象データ # [1] こちらへ→http://ime.nu/example.com/index.html # [2] 写真はこれです→https://example.com/写真.jpg # # ●希望する結果 # [1] こちらへ→<a href="http://ime.nu/example.com/index.html">http://example.com/index.html</a> # [2] 写真はこれです→<img src="https://example.com/写真.jpg" /> # # '・URLが含まれていたときに、jpg,png,gifならimgタグへ変換。 ・それ以外ならaタグへ変換。 '(_文字列,_imgタグ) :- 'URL部分の切り出し'(_文字列,_前文字列,_URL部分文字列,_後文字列), 'jpg,png,gifならimgタグへ変換。'(_前文字列,_URL部分文字列,_後文字列,_imgタグ),!. '・URLが含まれていたときに、jpg,png,gifならimgタグへ変換。 ・それ以外ならaタグへ変換。 '(_文字列,_imgタグ) :- 'URL部分の切り出し'(_文字列,_前文字列,_URL部分文字列,_後文字列), 'それ以外ならaタグへ変換'(_前文字列,_URL部分文字列,_後文字列,_imgタグ). 'jpg,png,gifならimgタグへ変換。'(_前文字列,_URL部分文字列,_後文字列,_imgタグ) :- 'jpg,png,gifなら'(_URL部分文字列), 'imgタグへ変換。'(_前文字列,_URL部分文字列,_後文字列,_imgタグ). 'jpg,png,gifなら'(_URL部分文字列) :- sub_atom(_URL部分文字列,_,4,0,_サフィックス部分文字列), member(_サフィックス部分文字列,['.jpg','.png','.gif']). 'imgタグへ変換。'(_前文字列,_URL部分文字列,_後文字列,_imgタグ) :- atomic_list_concat([_前文字列,'',_後文字列],_imgタグ). 'それ以外ならaタグへ変換'(_前文字列,_URL部分文字列,_後文字列,_aタグ) :- 'それ以外なら'(_URL部分文字列), 'aタグへ変換'(_前文字列,_URL部分文字列,_後文字列,_aタグ). 'それ以外なら'(_URL部分文字列) :- sub_atom(_URL部分文字列,_,4,0,_サフィックス部分文字列), \+(member(_サフィックス部分文字列,['.jpg','.png','.gif'])). 'aタグへ変換'(_前文字列,_URL部分文字列,_後文字列,_aタグ) :- atomic_list_concat([_前文字列,'',_URL部分文字列,'',_後文字列],_aタグ). 'URL部分の切り出し'(_文字列,_前文字列,_URL部分文字列,_後文字列) :- sub_atom(_文字列,S,Len,R,A), member(A,['http://','file://','ftp://']), S_2 is S + Len, 'URL部分の切り出し'(_文字列,S,S_2,_前文字列,_URL部分文字列,_後文字列). 'URL部分の切り出し'(_文字列,S,S_2,_前文字列,_URL部分文字列,_後文字列) :- sub_atom(_文字列,S_2,_,0,_副文字列), 区切り文字で分割(_副文字列,_URL部分文字列,_後文字列), sub_atom(_文字列,0,S,_,_前文字列),!. 区切り文字で分割(_副文字列,_URL部分文字列,_後文字列) :- sub_atom(_副文字列,S,1,R,_文字), member(_文字,[' ','\t','\n']), sub_atom(_副文字列,0,S,R,_URL部分文字列), sub_atom(_副文字列,_,R,0,_後文字列),!. 区切り文字で分割(_URL部分文字列,_URL部分文字列,''). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/391 # # ●要望 # 5桁の英数字の文字列データから、各桁が M W w のいずれかのみ、で構成されている文字列を検索する # # MwwWM # wwWMw # WWWMM # wMWww などがヒットするようにする # # [MWw][MWw][MWw][MWw][MWw]と書けば良いとは思いますが、[MWw]{5}と記述しても同様の結果は得られるのでしょうか? # 10桁とか12桁でも考えているので、コンパクトにまとめたいのです # {}は直前の繰り返しだから # MMMMM # WWWWW # wwwww としか一致しないのでしょうか? # # 一日でヒットするデータが得られるとは限らないものなので、簡単に検証できないのです # # よろしくです # # '5桁の英数字の文字列データから、各桁が M W w のいずれかのみ、で構成されている文字列を検索する'(_5桁の英数字の文字列) :- forall(sub_atom(_5桁の英数字の文字列,_,1,_,A),member(A,['M','W',w])). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/370 # # ●Regular Expressionの使用環境 # ActivePerl5.8 # # ●検索か置換か? # 検索 # # ●説明 # 連続する数を検索したい(1965から2011までの数) # # ●対象データ(配列内に格納) # 1952 # 1965 # 1986 # 2012 # 1972 # 2011 #  ・ #  ・ # ●希望する結果(配列の各要素を正規表現で検索して、マッチする要素だけ抽出) # 1965 # 1986 # 1972 # 2011 #  ・ #  ・ # # 配列の各要素が1955から2011までの数の場合にマッチする正規表現を教えてください # # '●検索か置換か? 検索 ●説明 連続する数を検索したい(1965から2011までの数) ●対象データ(配列内に格納) 1952 1965 1986 2012 1972 2011  ・  ・ ●希望する結果(配列の各要素を正規表現で検索して、マッチする要素だけ抽出) 1965 1986 1972 2011  ・  ・'(_文字列,_前文字列,_適合文字列,_後文字列) :- '連続する数を検索したい(1965から2011までの数)'(_文字列,_前文字列,_適合文字列,_後文字列). '連続する数を検索したい(1965から2011までの数)'(_文字列,_前文字列,_適合文字列,_後文字列) :- atom_chars(_文字列,_文字ならび), '文字ならびから連続する数を検索したい(1965から2011までの数)'(_文字ならび,_前文字列,_適合文字列,_後文字列). '文字ならびから連続する数を検索したい(1965から2011までの数)'(_文字ならび,_前文字列,_適合文字列,_後文字列) :- '数値を切り出す(1965から2011までの数)'(_文字ならび,L1,L2,L3,N), atom_chars(_前文字列,L1), atom_chars(_後文字列,L3), atom_chars(_適合文字列,L2). '数値を切り出す(1965から2011までの数)'(_文字ならび,L1,L2,L3,N) :- append(L1,L2,L3,_文字ならび), 全てが数字(L2), 'L1の最後の文字とL3の最初の文字は数字ではない'(L1,L3), number_chars(_数,L2), '1965から2011までの数'(_数). 全てが数字(_ならび) :- forall(member(_数字,_ならび),数字(_数字)). 数字(_数字) :- _数字 @>= '0', _数字 @=< '9'. 'L1の最後の文字とL3の最初の文字は数字ではない'(L1,L3) :- 'L1の最後の文字は数字ではない'(L1), 'L3の最初の文字は数字では無い'(L3). 'L1の最後の文字は数字ではない'(L1) :- \+((last(L1,A),数字(A))). 'L3の最初の文字は数字では無い'(L3) :- \+(([B|_]=L3,数字(B))). '1965から2011までの数'(_数) :- between(1965,2011,_数). % 以下のサイトは # phpなんですが # enarikazukiって文字列にマッチするのを作りたいんですが # testenarikazukwwww→i○ # #enarikazuki→× # enarikazukiって→○ # enarikazuki→○ # みたいに前後に何がついてもいいんですが、前に#がついた場合のみ # マッチしないようにするってのはどうすりゃいいんでしょうか? # 'enarikazukiって文字列にマッチするのを作りたいんですが testenarikazukwwww→i○ #enarikazuki→× enarikazukiって→○ enarikazuki→○ みたいに前後に何がついてもいいんですが、前に#がついた場合のみ マッチしないようにするってのはどうすりゃいいんでしょうか?'(_文字列,_前文字列,enarikazuki,_後文字列) :- sub_atom(_文字列,_開始文字位置,_長さ,_残り文字数,enarikazuki), sub_atom(_文字列,0,_開始文字位置,_,_前文字列), \+(sub_atom(_前文字列,_,1,0,#)), sub_atom(_文字列,_,_残り文字数,0,_後文字列). % 以下のサイトは # phpなんですが # enarikazukiって文字列にマッチするのを作りたいんですが # testenarikazukwwww→i○ # #enarikazuki→× # enarikazukiって→○ # enarikazuki→○ # みたいに前後に何がついてもいいんですが、前に#がついた場合のみ # マッチしないようにするってのはどうすりゃいいんでしょうか? # 'enarikazukiって文字列にマッチするのを作りたいんですが testenarikazukwwww→i○ #enarikazuki→× enarikazukiって→○ enarikazuki→○ みたいに前後に何がついてもいいんですが、前に#がついた場合のみ マッチしないようにするってのはどうすりゃいいんでしょうか?'(_文字列,_前文字列,_適合文字列,_後文字列) :- 'enarikazukiって文字列にマッチするのを作りたい。ただし#enarikazukiは避ける'(_文字列,_前文字列,_適合文字列,_後文字列). 'enarikazukiって文字列にマッチするのを作りたい。ただし#enarikazukiは避ける'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列_1,enarikazuki,_後文字列_1,L1,L2,L3), \+(last(L1,#)), 'enarikazukiって文字列にマッチするのを作りたい。ただし#enarikazukiは避ける'(_前文字列_1,enarikazuki,_後文字列_1,_前文字列,_適合文字列,_後文字列). 'enarikazukiって文字列にマッチするのを作りたい。ただし#enarikazukiは避ける'(_前文字列,enarikazuki,_後文字列,_前文字列,enarikazuki,_後文字列). 'enarikazukiって文字列にマッチするのを作りたい。ただし#enarikazukiは避ける'(_前文字列_1,enarikazuki,_後文字列_1,_前文字列,enarikazuki,_後文字列) :- 'enarikazukiって文字列にマッチするのを作りたい。ただし#enarikazukiは避ける'(_後文字列,_前文字列_2,enarikazuki,_後文字列), atomic_list_concat([_前文字列_1,erarikazuki,_前文字列_2],_前文字列). % 以下のサイトは # ●問題文 # <b>タグのように開始タグの部分にマッチする正規表現を最小限の階数のキャプチャを用いて書きなさい。 # タグ名は1文字以上の英単語であり、属性には「>」以外の任意の文字を使えるものとする。 # ●例文 # <b>ゴレイヌさん</b>は、えげつねぇ・・・<font color="red">ゴレイヌさん</font>は # えげつねぇ。。。<font color="blue">富樫仕事</font>しろ。 # ●マッチする例 # <b> # <font color="red"> # <font color="blue"> # # ●答え # <(?:\w+)(?:\s+[^>]*)*> # ●解説 # 「<」と「>」に囲まれた部分にマッチさせればよいのですが、属性付きのタグを考慮しなくてはいけません。 # また、最小限のキャプチャという条件があるため、グループ化のみでキャプチャを必要としない場所では「(?:)」を使います。 # この問題の場合には、1回もキャプチャを使わずに記述する事が可能です。 # # と、あるのですが # <\w+(?:\s+[^>]*)*> # でないかと思っています。 # \w+はグループ化する必要がそもそもあるのでしょうか? # '<b>タグのように開始タグの部分にマッチする'(_文字列,_前文字列,_開始タグ,_後文字列) :- 開始タグを切り出す(_文字列,_前文字列_1,_開始タグ_1,_後文字列_1), 開始タグ名は1文字以上の英単語であり(_開始タグ_1), '<b>タグのように開始タグの部分にマッチする'(_前文字列_1,_開始タグ_1,_後文字列_1,_前文字列,_開始タグ,_後文字列). '<b>タグのように開始タグの部分にマッチする'(_前文字列,_適合文字列,_後文字列,_前文字列,_適合文字列,_後文字列). '<b>タグのように開始タグの部分にマッチする'(_前文字列_1,_適合文字列_1,_後文字列_1,_前文字列,_適合文字列,_後文字列) :- '<b>タグのように開始タグの部分にマッチする'(_後文字列_1,_前文字列_2,_適合文字列,_後文字列), atomic_list_concat([_前文字列_1,_適合文字列_1,_前文字列_2],_前文字列). 開始タグを切り出す(_前文字列,_開始タグ,_後文字列) :- sub_atom(_文字列,St,Len,R,_開始タグ), 開始タグ(_開始タグ), sub_atom(_文字列,0,St,_,_前文字列), sub_atom(_文字列,_,R,0,_後文字列),!. 開始タグ(_開始タグ) :- sub_atom(_開始タグ,0,1,_,<), \+(sub_atom(_開始タグ,0,2,_,'). '開始タグの情報部分は>を含まない'(_開始タグ) :- sub_atom(_開始タグ,1,_,1,_開始タグの情報部分), \+(sub_atom(_開始タグの情報部分,_,1,_,>)),!. 開始タグ名は1文字以上の英単語であり(_開始タグ) :- 開始タグ名は(_開始タグ,_開始タグ名), '1文字以上の英単語である'(_開始タグ名),!. 開始タグ名は(_開始タグ,_開始タグ名) :- sub_atom(_開始タグ,1,_,1,_開始タグの情報部分), 開始タグ名を切り出す(_開始タグの情報部分,_開始タグ名),!. 開始タグ名を切り出す(_開始タグの情報部分,_開始タグ名) :- sub_atom(_開始タグの情報部分,St,1,_,' '), sub_atom(_開始タグの情報部分,0,St,_,_開始タグ名),!. 開始タグ名を切り出す(_開始タグ名,_開始タグ名). '1文字以上の英単語である'(_タグ名の文字ならび) :- forall(sub_atom(_開始タグ名,_,1,_,A),英文字か数字(A)). 英文字か数字(A) :- 英文字(A). 英文字か数字(A) :- 数字(A). 英文字(A) :- A @>= 'a', A @=< 'z',!. 英文字(A) :- A @>= 'A', A @=< 'Z',!. 数字(A) :- A @>= '0', A @=< '9',!. % 以下のサイトは # ^.*\d{2}[a-zA-Z]?\.gif # という表現がマッチする文字列があるとします。 # 例えば、img01A.gifです。 # この文字列から、頭のゼロを外した数字を抜き出したいです。 # 上の例では、「1」を抜き出したいです。 # 「01」を抜き出すのでよければ、 # ^.*(\d{2})[a-zA-Z]?\.gif # として、「$1」で受ければいいですが、 # 頭のゼロをスマートに取り除く方法を模索しています。 # よろしくお願いします。有難うございます。 '^.*\d{2}[a-zA-Z]?\.gif という表現がマッチする文字列があるとします。 例えば、img01A.gifです。 この文字列から、頭のゼロを外した数字を抜き出したいです。 上の例では、「1」を抜き出したいです。 「01」を抜き出すのでよければ、 ^.*(\d{2})[a-zA-Z]?\.gif として、「$1」で受ければいいですが、 頭のゼロをスマートに取り除く方法を模索しています。 よろしくお願いします。有難うございます。'(_文字列,_頭部のゼロを取り除いた数字文字列) :- '文字列から、頭のゼロを外した数字を抜き出したいです。'(_文字列,_頭のゼロを取り除いた数字文字列). '文字列から、頭のゼロを外した数字を抜き出したいです。'(_文字列,_頭のゼロを取り除いた数字文字列) :- 数字文字ならびを切り取る(_文字列,_数字文字ならび), 頭のゼロを取り除く(_数字文字ならび,_頭のゼロを取り除いた数字文字ならび), atom_chars(_頭のゼロを取り除いた数字文字列,_頭のゼロを取り除いた数字文字ならび). 数字文字ならびを切り取る(_文字列,_数字文字ならび) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,_数字文字ならび,L3), '_数字文字ならびは数字のみで構成され、L1に数字は含まず、L3の先頭文字は数字ではない'(L1,_数字文字ならび,L3). '_数字文字ならびは数字のみで構成され、L1に数字は含まず、L3の先頭文字は数字ではない'(L1,_数字文字ならび,L3) :- forall(member(_数字文字,_数字文字ならび),数字(_数字文字)), forall(member(_文字,L1),\+(数字(_文字))), \+((L3 = [_文字|_],数字(_文字))),!. 頭のゼロを取り除く([],[]). 頭のゼロを取り除く([A|R],[A|R]) :- \+(A='0'),!. 頭のゼロを取り除く(['0'|R1],R2) :- 頭のゼロを取り除く(R1,R2). 頭のゼロを取り除く([A|R1],[A|R2]) :- 頭のゼロを取り除く(R1,R2). % 以下のサイトは # 出題場所 :: http://toro.2ch.net/test/read.cgi/tech/1362913813/233 # # ●Regular Expressionの使用環境 # 秀丸 8.2.1 # ●検索か置換か? # 置換 # # ●説明 # 二つ目のTab以降を削除したいです。 # # ●対象データ # 100 こくご えいご 100 20 固定 # 共通 シャカイ スウガク 100 10 ランダム # # (データの間の空白は全部Tabです) # # ●希望する結果 # 100 こくご # 共通 すうがく # # # 下の正規表現で試してみました。 # ^(.*)?\t(.*)?\t[あ-ん ア-ン].* # \1\t\2 # (.*)?\t(.*)?\tでTabまでの最短マッチ(のつもり)二つで、えいご、スウガクまでを指定しています。 # # 3つめのカラムの1文字目がひらがなとカタカナなので、[あ-ん ア-ン]で指定しているのですが、 # 後ろの"ランダム"がマッチしてしまい、2行目が下のような結果になってしまいます。 # # 100 こくご # 共通 シャカイ スウガク 100 10 # # やり方教えて貰えればうれしいです。 # よろしくお願いします。 # '二つ目のTab以降を削除したいです。'(_文字列,_二つ目のTab以降を削除後の文字列) :- atom_chars(_文字列,Chars), '二つ目のTab以降を削除したいです。'(Chars,['\t','\t'],_二つ目のTab以降を削除後の文字ならび), atom_chars(_二つ目のTab以降を削除後の文字列,_二つ目のTab以降を削除後の文字ならび). '二つ目のTab以降を削除したいです。'([A|_二つめのTab以降],[A],[A]) :- !. '二つ目のTab以降を削除したいです。'([A|R1],[A|R2],[A|R3]) :- '二つ目のTab以降を削除したいです。'(R1,R2,R3). '二つ目のTab以降を削除したいです。'([B|R1],L2,[B|R3]) :- '二つ目のTab以降を削除したいです。'(R1,L2,R3). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '二つ目のTab以降を削除したいです。'(_文字列,_二つ目のTab以降を削除後の文字列) :- atom_chars(_文字列,Chars), '一文字ずつ最初のTabが来るまで'(Chars,_Tabまでの文字ならび,_残り文字ならび_1), '二個目のTabが来るまで'(_残り文字ならび_1,_二個目のTabまでの文字ならび), append(_Tabまでの文字ならび,_二個目のTabまでの文字ならび,_二つ目のTabまでの文字ならび), atom_chars(_二つ目のTab以降を削除後の文字列,_二つ目のTabまでの文字ならび). '一文字ずつ最初のTabが来るまで'(['\t'|_残り文字ならび],['\t'],_残り文字ならび) :- !. '一文字ずつ最初のTabが来るまで'([A|_残り文字ならび],[],_残り文字ならび) :- '一文字ずつ最初のTabが来るまで'([A|_残り文字ならび],[],_残り文字ならび),!. '二個目のTabが来るまで'(['\t'|_],['\t']) :- !. '二個目のTabが来るまで'([A|R1],[A|R2]) :- '二個目のTabが来るまで'(R1,R2). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '二つ目のTab以降を削除したいです。'(_文字列,_二つ目のTab以降を削除後の文字列) :- 文字ならびに変換する(_文字列,_文字ならび), 二つのTabが来るまで(_文字ならび,_最初のTabまで,_その後二つ目のTabまで), 文字列を復元(_最初のTabまで,_その後二つ目のTabまで,_二つ目のTab以降を削除後の文字列). 文字ならびに変換する(_文字列,_文字ならび) :- atom_chars(_文字列,_文字ならび). 二つのTabが来るまで(_文字ならび,_最初のTabまで,_その後二つ目のTabまで) :- append(L1,['\t'|R2],['\t'|_],_文字ならび). 文字列を復元(_最初のTabまで,_その後二つ目のTabまで,_二つ目のTab以降を削除後の文字列) :- append(_最初のTabまで,['\t'|_その後二つめのTabまで],['\t'],_二つ目のTab以降を削除後の文字ならび), atom_chars(_二つ目のTab以降を削除後の文字列,_二つ目のTab以降を削除後の文字ならび),!. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '二つ目のTab以降を削除したいです。'(_文字列,_二つ目のTab以降を削除後の文字列) :- 最初のTabから後の副文字列を得る(_文字列,_最初のTabを含めた文字列の長さ,_それ以後の文字列), それ以後の文字列の最初に現れたTabを含めた長さ(_それ以後の文字列,_それ以後の文字列の最初に現れたTabを含めた長さ), _長さ is _最初のTabを含めたそこまでの文字列の長さ + _それ以後の文字列の最初に現れたTabを含めた長さ, sub_atom(_文字列,0,_長さ,_,_二つ目のTab以降を削除後の文字列),!. 最初のTabから後の副文字列を得る(_文字列,_最初のTabを含めた文字列の長さ,_それ以後の文字列) :- sub_atom(_文字列,St1,1,R,'\t'), _最初のTabを含めたそこまでの文字列の長さ is St1 + 1, sub_atom(_文字列,_最初のTabを含めた文字列の長さ,R,0,_それ以後の文字列). それ以後の文字列の最初に現れたTabを含めた最初からの長さ(_それ以後の文字列,_それ以後の文字列の最初に現れたTabを含めた長さ) :- sub_atom(_それ以後の文字列,St,1,_,'\t'), _それ以後の文字列の最初に現れたTabを含めた長さ is St + 1,!. % 以下のサイトは # # 特定の文字が含まれる行のみ消す場合の正規表現教えて下さい. # 特定の文字が含まれる行のみ消す(_文字列,_特定の文字列,_特定の文字を含む行を除いて結合し直した文字列) :- sPLIT(_文字列,['\n'],L), 特定の文字が含まれる行のみ消す(L,_特定の文字列,_特定の文字を含む行を除いた文字列ならび), atomic_list_concat(_特定の文字を含む行を除いた文字列ならび,_特定の文字を含む行を除いて結合し直した文字列). 特定の文字が含まれる行のみ消す([_文字列,'\n'|R1],_特定の文字列,L) :- 特定の文字が含まれる(_文字列,_特定の文字列), 特定の文字が含まれる行のみ消す(R1,_特定の文字列,L2),!. 特定の文字が含まれる行のみ消す([_文字列,'\n'|R1],_特定の文字列,[_文字列,'\n'|R2]) :- 特定の文字が含まれる行のみ消す(R1,_特定の文字列,R2),!. 特定の文字が含まれる行のみ消す(L,_,L). 特定の文字が含まれる(_文字列,_特定の文字列) :- sub_atom(_文字列,_,_,_,_特定の文字列),!. % 以下のサイトは # # 特定の文字が含まれる行のみ消す場合の正規表現教えて下さい. # 特定の文字が含まれる行のみ消す(_文字列,_特定の文字列,_特定の文字を含む行を除いて結合し直した文字列) :- sPLIT(_文字列,['\n'],L), 特定の文字が含まれる行のみ消す(L,_特定の文字列,_特定の文字を含む行を除いた文字列ならび), atomic_list_concat(_特定の文字を含む行を除いた文字列ならび,_特定の文字を含む行を除いて結合し直した文字列). 特定の文字が含まれる行のみ消す([_文字列,'\n'|R1],_特定の文字列,L) :- 特定の文字が含まれる(_文字列,_特定の文字列), 特定の文字が含まれる行のみ消す(R1,_特定の文字列,L2),!. 特定の文字が含まれる行のみ消す([_文字列,'\n'|R1],_特定の文字列,[_文字列,'\n'|R2]) :- 特定の文字が含まれる行のみ消す(R1,_特定の文字列,R2),!. 特定の文字が含まれる行のみ消す(L,_,L). 特定の文字が含まれる(_文字列,_特定の文字列) :- sub_atom(_文字列,_,_,_,_特定の文字列),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/172 # # ●Regular Expressionの使用環境 # PHP5 # # ●検索か置換か? # 置換 # # ●説明 # Javaのコメント・文字列を抽出してタグで囲みたいです。 # /**/, "", '' が入れ子になってる場合に外側だけ適応するのができません # 失敗例 <ダブル>"これは<シングル>'ペン'</シングル>です"</ダブル> # 成功例 <ダブル>"これは'ペン'です"</ダブル> # # ●対象データ() # /* "hello" 'world' */ # String var="これは'ペン'です"; # String apos='apopo "/* moge'; # # ●希望する結果 # <コメント>/* "hello" 'world' */</コメント> # String var=<ダブル>"これは'ペン'です"</ダブル>; # String apos=<シングル>'apopo "/* moge'</シングル>; # # 'Javaのコメント・文字列を抽出してタグで囲みたいです。'(_文字列,_置換された文字列) :- atom_chars(_文字列,Chars), '文字ならびからコメント・文字列を抽出してタグで囲む'(Chars,_置換された文字ならび), atom_chars(_置換された文字列,_置換された文字ならび). '文字ならびからコメント・文字列を抽出してタグで囲む'([],[]). '文字ならびからコメント・文字列を抽出してタグで囲む'([''''|R1],[<,シ,ン,グ,ル,>,''''|L1]) :- 'シングルクォートの外側入れ子を変換'(R1,L1,R2),!, '文字ならびからコメント・文字列を抽出してタグで囲む'(R1,R2). '文字ならびからコメント・文字列を抽出してタグで囲む'(['"'|R1],[<,ダ,ブ,ル,>,'"'|L1]) :- 'ダブルクォートの外側入れ子を変換'(R1,L1,R2),!, '文字ならびからコメント・文字列を抽出してタグで囲む'(R1,R2). '文字ならびからコメント・文字列を抽出してタグで囲む'([/,*|R1],[<,コ,メ,ン,ト,>,/,*|L1]) :- 'コメントの外側入れ子を変換'(R1,L1,R2),!, '文字ならびからコメント・文字列を抽出してタグで囲む'(R1,R2). '文字ならびからコメント・文字列を抽出してタグで囲む'([A|R1],[A|R2]) :- '文字ならびからコメント・文字列を抽出してタグで囲む'(R1,R2). シングルクォートの外側入れ子を変換(L,L1,R) :- append(L0,[''''|R],L), \+(member('''',R)), append(L0,['''',<,/,シ,ン,グ,ル,>|R],L1),!. ダブルクォートの外側入れ子を変換(L,L1,R) :- append(L0,['"'|R],L), \+(member('"',R)), append(L0,['"',<,/,ダ,ブ,ル,>|R],L1),!. コメントの外側入れ子を変換(L,L1,R) :- append(L0,[*,/|R],L), \+(append(_,[*,/|_],R)), append(L0,[*,/,<,/,コ,メ,ン,ト,>|R],L1),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/117 # # コメント内の任意の文字を全て半角スペースに置き換える正規表現は可能でしょうか? # aaaは固定ではなく、長さや文字も任意です。 # 文字数分スペースに置き換える必要があります。 # # 変換前 # /*aaa*/ # # 変換後 # /* */ # # 'コメント内の任意の文字を全て半角スペースに置き換える正規表現は可能でしょうか? aaaは固定ではなく、長さや文字も任意です。 文字数分スペースに置き換える必要があります。 変換前 /*aaa*/ 変換後 /* */'(_文字列,_置換された文字列) :- コメント内の任意の文字を全て半角スペースに置き換える(_文字列,_置換された文字列). コメント内の任意の文字を全て半角スペースに置き換える(_文字列,_置換された文字列) :- sub_atom(_文字列,'/*','*/',_,_,_,S1,S2,S3,L1,L2,L3), sub_atom(S2,2,Len,2,_), length(L0,Len), all(L0,' '), atomic_list_concat([S1,'/*',L0,'*/',S3],_置換された文字列). % 以下のサイトは # このディレクトリの索引 # ●Regular Expressionの使用環境 # Ruby 1.9 # # ●検索か置換か? # 検索 # # ●説明 # red または blue が含まれてない行を検索したい。 # # ●対象データ # yellow red blue green orange # red green yellow orange # black yellow orange white # green yellow blue orange # # ●希望する結果 # black yellow orange white # 'red または blue が含まれてない行を検索したい。'([_文字列|R],_文字列) :- \+(sub_atom(_文字列,_,_,_,red)), \+(sub_atom(_文字列,_,_,_,blue)). 'red または blue が含まれてない行を検索したい。'([_|R],_文字列) :- 'red または blue が含まれてない行を検索したい。'(R,_文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/103 # # # 無理だろうね # バカバカしいはOKでバカはNGみたいなのは正規表現では無理 # バカバカしいはOKでバカはNG(_文字列,'NG') :- sub_atom(_文字列,S,2,_,バカ), \+(sub_atom(_文字列,S,6,_,バカバカしい)),!. バカバカしいはOKでバカはNG(_文字列,'OK'). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/103 # # # 無理だろうね # バカバカしいはOKでバカはNGみたいなのは正規表現では無理 # バカバカしいはOKでバカはNG('') :- !. バカバカしいはOKでバカはNG(_文字列) :- sub_atom(_文字列,0,2,_,バカ), \+(sub_atom(_文字列,0,6,_,バカバカしい)),!, fail. バカバカしいはOKでバカはNG(_文字列) :- sub_atom(_文字列,0,6,R,バカバカしい), sub_atom(_文字列,_,R,0,_副文字列), バカバカしいはOKでバカはNG(_副文字列),!. バカバカしいはOKでバカはNG(_文字列) :- sub_atom(_文字列,1,_,0,_副文字列), バカバカしいはOKでバカはNG(_副文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/591 # # ●正規表現の使用環境 # Perl # # ●検索か置換か? # 検索 # # ●説明 # トップから第三レベルドメインまでをマッチさせたい。 # www.(mydomain.co.jp)※括弧の中 # サブドメインが無い場合も想定されます。 # mydomain.com # www.aaa.mydomain.com # aaa.bbb.mydomain.com # # ●対象データ # www.mydomain.co.jp # mydomain.co.jp # mydomain.com # www.aaa.mydomain.com # aaa.bbb.mydomain.com # # ●希望する結果 # mydomain.co.jp # mydomain.com # # よろしくお願いします。 # # 'トップから第三レベルドメインまでをマッチさせたい。'(_文字列,_第三レベルドメインまでの文字列) :- '第二・第一レベルドメインと第三以上レベルドメイン文字列を得る'(_文字列,_第二第一レベルドメイン,_第三以上レベルドメイン文字列), '第三レベルドメインを切り出す'(_第三以上レベルドメイン文字列,_第三レベルドメイン), atomic_list_concat([_第三レベルドメイン,_第二第一レベルドメイン],_第三レベルドメインまでの文字列]). '第二・第一レベルドメインと第三以上レベルドメイン文字列を得る'(_文字列,_第二第一レベルドメイン,_第三以上レベル文字列) :- '第二・第一レベルドメイン'(_第二第一レベルドメイン), sub_atom(_文字列,S,Len,R,_第二第一レベルドメイン), sub_atom(_文字列,0,S,_,_第三以上レベル文字列). '第三レベルドメインを切り出す'(_第三以上レベルドメイン文字列,_第三レベルドメイン) :- split(_第三以上レベルドメイン文字列,['.'],L), last(L,_第三レベルドメイン),!. '第二・第一レベルドメイン'(a). '第二・第一レベルドメイン'(ab). '第二・第一レベルドメイン'(abo). '第二・第一レベルドメイン'(abog). '第二・第一レベルドメイン'(aboga). '第二・第一レベルドメイン'(abogad). '第二・第一レベルドメイン'(abogado). '第二・第一レベルドメイン'(ac). '第二・第一レベルドメイン'(ad). '第二・第一レベルドメイン'(adu). '第二・第一レベルドメイン'(adul). '第二・第一レベルドメイン'(adult). '第二・第一レベルドメイン'(ae). '第二・第一レベルドメイン'(aer). '第二・第一レベルドメイン'(aero). '第二・第一レベルドメイン'(af). '第二・第一レベルドメイン'(afr). '第二・第一レベルドメイン'(afri). '第二・第一レベルドメイン'(afric). '第二・第一レベルドメイン'(africa). '第二・第一レベルドメイン'(ag). '第二・第一レベルドメイン'(ai). '第二・第一レベルドメイン'(al). '第二・第一レベルドメイン'(am). '第二・第一レベルドメイン'(ams). '第二・第一レベルドメイン'(amst). '第二・第一レベルドメイン'(amste). '第二・第一レベルドメイン'(amster). '第二・第一レベルドメイン'(amsterd). '第二・第一レベルドメイン'(amsterda). '第二・第一レベルドメイン'(amsterdam). '第二・第一レベルドメイン'(ap). '第二・第一レベルドメイン'(app). '第二・第一レベルドメイン'(as). '第二・第一レベルドメイン'(asi). '第二・第一レベルドメイン'(asia). '第二・第一レベルドメイン'(at). '第二・第一レベルドメイン'(au). '第二・第一レベルドメイン'(auc). '第二・第一レベルドメイン'(auct). '第二・第一レベルドメイン'(aucti). '第二・第一レベルドメイン'(auctio). '第二・第一レベルドメイン'(auction). '第二・第一レベルドメイン'(ax). '第二・第一レベルドメイン'(az). '第二・第一レベルドメイン'(b). '第二・第一レベルドメイン'(ba). '第二・第一レベルドメイン'(bab). '第二・第一レベルドメイン'(baby). '第二・第一レベルドメイン'(ban). '第二・第一レベルドメイン'(bank). '第二・第一レベルドメイン'(bar). '第二・第一レベルドメイン'(barc). '第二・第一レベルドメイン'(barce). '第二・第一レベルドメイン'(barcel). '第二・第一レベルドメイン'(barcelo). '第二・第一レベルドメイン'(barcelon). '第二・第一レベルドメイン'(barcelona). '第二・第一レベルドメイン'(bb). '第二・第一レベルドメイン'(be). '第二・第一レベルドメイン'(bee). '第二・第一レベルドメイン'(beer). '第二・第一レベルドメイン'(ber). '第二・第一レベルドメイン'(berl). '第二・第一レベルドメイン'(berli). '第二・第一レベルドメイン'(berlin). '第二・第一レベルドメイン'(bg). '第二・第一レベルドメイン'(bi). '第二・第一レベルドメイン'(bik). '第二・第一レベルドメイン'(bike). '第二・第一レベルドメイン'(biz). '第二・第一レベルドメイン'(bj). '第二・第一レベルドメイン'(bl). '第二・第一レベルドメイン'(blo). '第二・第一レベルドメイン'(blog). '第二・第一レベルドメイン'(bm). '第二・第一レベルドメイン'(bo). '第二・第一レベルドメイン'(boo). '第二・第一レベルドメイン'(book). '第二・第一レベルドメイン'(booki). '第二・第一レベルドメイン'(bookin). '第二・第一レベルドメイン'(booking). '第二・第一レベルドメイン'(bos). '第二・第一レベルドメイン'(bost). '第二・第一レベルドメイン'(bosto). '第二・第一レベルドメイン'(boston). '第二・第一レベルドメイン'(br). '第二・第一レベルドメイン'(bru). '第二・第一レベルドメイン'(brus). '第二・第一レベルドメイン'(bruss). '第二・第一レベルドメイン'(brusse). '第二・第一レベルドメイン'(brussel). '第二・第一レベルドメイン'(brussels). '第二・第一レベルドメイン'(bs). '第二・第一レベルドメイン'(bu). '第二・第一レベルドメイン'(bud). '第二・第一レベルドメイン'(buda). '第二・第一レベルドメイン'(budap). '第二・第一レベルドメイン'(budape). '第二・第一レベルドメイン'(budapes). '第二・第一レベルドメイン'(budapest). '第二・第一レベルドメイン'(by). '第二・第一レベルドメイン'(bz). '第二・第一レベルドメイン'(c). '第二・第一レベルドメイン'(ca). '第二・第一レベルドメイン'(cap). '第二・第一レベルドメイン'(cape). '第二・第一レベルドメイン'(capet). '第二・第一レベルドメイン'(capeto). '第二・第一レベルドメイン'(capetow). '第二・第一レベルドメイン'(capetown). '第二・第一レベルドメイン'(car). '第二・第一レベルドメイン'(care). '第二・第一レベルドメイン'(caree). '第二・第一レベルドメイン'(career). '第二・第一レベルドメイン'(cas). '第二・第一レベルドメイン'(cash). '第二・第一レベルドメイン'(cat). '第二・第一レベルドメイン'(cc). '第二・第一レベルドメイン'(cd). '第二・第一レベルドメイン'(cf). '第二・第一レベルドメイン'(cg). '第二・第一レベルドメイン'(ch). '第二・第一レベルドメイン'(chr). '第二・第一レベルドメイン'(chri). '第二・第一レベルドメイン'(chris). '第二・第一レベルドメイン'(christ). '第二・第一レベルドメイン'(christm). '第二・第一レベルドメイン'(christma). '第二・第一レベルドメイン'(christmas). '第二・第一レベルドメイン'(ci). '第二・第一レベルドメイン'(cl). '第二・第一レベルドメイン'(cli). '第二・第一レベルドメイン'(clic). '第二・第一レベルドメイン'(click). '第二・第一レベルドメイン'(cm). '第二・第一レベルドメイン'(cn). '第二・第一レベルドメイン'(co). '第二・第一レベルドメイン'('co.'). '第二・第一レベルドメイン'('co.a'). '第二・第一レベルドメイン'('co.ao'). '第二・第一レベルドメイン'('co.at'). '第二・第一レベルドメイン'('co.b'). '第二・第一レベルドメイン'('co.bw'). '第二・第一レベルドメイン'('co.c'). '第二・第一レベルドメイン'('co.ck'). '第二・第一レベルドメイン'('co.cm'). '第二・第一レベルドメイン'('co.cr'). '第二・第一レベルドメイン'('co.f'). '第二・第一レベルドメイン'('co.fk'). '第二・第一レベルドメイン'('co.h'). '第二・第一レベルドメイン'('co.hu'). '第二・第一レベルドメイン'('co.i'). '第二・第一レベルドメイン'('co.id'). '第二・第一レベルドメイン'('co.il'). '第二・第一レベルドメイン'('co.in'). '第二・第一レベルドメイン'('co.ir'). '第二・第一レベルドメイン'('co.j'). '第二・第一レベルドメイン'('co.jp'). '第二・第一レベルドメイン'('co.k'). '第二・第一レベルドメイン'('co.ke'). '第二・第一レベルドメイン'('co.kr'). '第二・第一レベルドメイン'('co.l'). '第二・第一レベルドメイン'('co.ls'). '第二・第一レベルドメイン'('co.m'). '第二・第一レベルドメイン'('co.mz'). '第二・第一レベルドメイン'('co.n'). '第二・第一レベルドメイン'('co.nl'). '第二・第一レベルドメイン'('co.no'). '第二・第一レベルドメイン'('co.nz'). '第二・第一レベルドメイン'('co.r'). '第二・第一レベルドメイン'('co.rs'). '第二・第一レベルドメイン'('co.t'). '第二・第一レベルドメイン'('co.th'). '第二・第一レベルドメイン'('co.tt'). '第二・第一レベルドメイン'('co.tz'). '第二・第一レベルドメイン'('co.u'). '第二・第一レベルドメイン'('co.ug'). '第二・第一レベルドメイン'('co.uk'). '第二・第一レベルドメイン'('co.z'). '第二・第一レベルドメイン'('co.za'). '第二・第一レベルドメイン'('co.zw'). '第二・第一レベルドメイン'(cof). '第二・第一レベルドメイン'(coff). '第二・第一レベルドメイン'(coffe). '第二・第一レベルドメイン'(coffee). '第二・第一レベルドメイン'(com). '第二・第一レベルドメイン'('com.'). '第二・第一レベルドメイン'('com.a'). '第二・第一レベルドメイン'('com.ag'). '第二・第一レベルドメイン'('com.ai'). '第二・第一レベルドメイン'('com.al'). '第二・第一レベルドメイン'('com.an'). '第二・第一レベルドメイン'('com.ar'). '第二・第一レベルドメイン'('com.au'). '第二・第一レベルドメイン'('com.aw'). '第二・第一レベルドメイン'('com.az'). '第二・第一レベルドメイン'('com.b'). '第二・第一レベルドメイン'('com.bd'). '第二・第一レベルドメイン'('com.bh'). '第二・第一レベルドメイン'('com.bn'). '第二・第一レベルドメイン'('com.bo'). '第二・第一レベルドメイン'('com.br'). '第二・第一レベルドメイン'('com.bs'). '第二・第一レベルドメイン'('com.bt'). '第二・第一レベルドメイン'('com.c'). '第二・第一レベルドメイン'('com.cm'). '第二・第一レベルドメイン'('com.cn'). '第二・第一レベルドメイン'('com.co'). '第二・第一レベルドメイン'('com.cy'). '第二・第一レベルドメイン'('com.d'). '第二・第一レベルドメイン'('com.de'). '第二・第一レベルドメイン'('com.dz'). '第二・第一レベルドメイン'('com.e'). '第二・第一レベルドメイン'('com.ec'). '第二・第一レベルドメイン'('com.eg'). '第二・第一レベルドメイン'('com.es'). '第二・第一レベルドメイン'('com.et'). '第二・第一レベルドメイン'('com.f'). '第二・第一レベルドメイン'('com.fj'). '第二・第一レベルドメイン'('com.g'). '第二・第一レベルドメイン'('com.ge'). '第二・第一レベルドメイン'('com.gh'). '第二・第一レベルドメイン'('com.gi'). '第二・第一レベルドメイン'('com.gl'). '第二・第一レベルドメイン'('com.gn'). '第二・第一レベルドメイン'('com.gr'). '第二・第一レベルドメイン'('com.gt'). '第二・第一レベルドメイン'('com.gu'). '第二・第一レベルドメイン'('com.h'). '第二・第一レベルドメイン'('com.hk'). '第二・第一レベルドメイン'('com.hr'). '第二・第一レベルドメイン'('com.j'). '第二・第一レベルドメイン'('com.jm'). '第二・第一レベルドメイン'('com.jo'). '第二・第一レベルドメイン'('com.k'). '第二・第一レベルドメイン'('com.kh'). '第二・第一レベルドメイン'('com.kw'). '第二・第一レベルドメイン'('com.l'). '第二・第一レベルドメイン'('com.lb'). '第二・第一レベルドメイン'('com.lr'). '第二・第一レベルドメイン'('com.lv'). '第二・第一レベルドメイン'('com.ly'). '第二・第一レベルドメイン'('com.m'). '第二・第一レベルドメイン'('com.mg'). '第二・第一レベルドメイン'('com.mk'). '第二・第一レベルドメイン'('com.mo'). '第二・第一レベルドメイン'('com.mt'). '第二・第一レベルドメイン'('com.mx'). '第二・第一レベルドメイン'('com.my'). '第二・第一レベルドメイン'('com.n'). '第二・第一レベルドメイン'('com.na'). '第二・第一レベルドメイン'('com.ng'). '第二・第一レベルドメイン'('com.ni'). '第二・第一レベルドメイン'('com.np'). '第二・第一レベルドメイン'('com.o'). '第二・第一レベルドメイン'('com.om'). '第二・第一レベルドメイン'('com.p'). '第二・第一レベルドメイン'('com.pa'). '第二・第一レベルドメイン'('com.pe'). '第二・第一レベルドメイン'('com.ph'). '第二・第一レベルドメイン'('com.pk'). '第二・第一レベルドメイン'('com.pl'). '第二・第一レベルドメイン'('com.pr'). '第二・第一レベルドメイン'('com.pt'). '第二・第一レベルドメイン'('com.py'). '第二・第一レベルドメイン'('com.q'). '第二・第一レベルドメイン'('com.qa'). '第二・第一レベルドメイン'('com.r'). '第二・第一レベルドメイン'('com.ro'). '第二・第一レベルドメイン'('com.s'). '第二・第一レベルドメイン'('com.sg'). '第二・第一レベルドメイン'('com.sn'). '第二・第一レベルドメイン'('com.sv'). '第二・第一レベルドメイン'('com.sy'). '第二・第一レベルドメイン'('com.t'). '第二・第一レベルドメイン'('com.tn'). '第二・第一レベルドメイン'('com.tr'). '第二・第一レベルドメイン'('com.tw'). '第二・第一レベルドメイン'('com.u'). '第二・第一レベルドメイン'('com.ua'). '第二・第一レベルドメイン'('com.uy'). '第二・第一レベルドメイン'('com.v'). '第二・第一レベルドメイン'('com.ve'). '第二・第一レベルドメイン'('com.vn'). '第二・第一レベルドメイン'(con). '第二・第一レベルドメイン'(cond). '第二・第一レベルドメイン'(condo). '第二・第一レベルドメイン'(condos). '第二・第一レベルドメイン'(cons). '第二・第一レベルドメイン'(consu). '第二・第一レベルドメイン'(consul). '第二・第一レベルドメイン'(consult). '第二・第一レベルドメイン'(consulti). '第二・第一レベルドメイン'(consultin). '第二・第一レベルドメイン'(consulting). '第二・第一レベルドメイン'(coo). '第二・第一レベルドメイン'(coop). '第二・第一レベルドメイン'(cor). '第二・第一レベルドメイン'(cors). '第二・第一レベルドメイン'(corsi). '第二・第一レベルドメイン'(corsic). '第二・第一レベルドメイン'(corsica). '第二・第一レベルドメイン'(cr). '第二・第一レベルドメイン'(cre). '第二・第一レベルドメイン'(cred). '第二・第一レベルドメイン'(credi). '第二・第一レベルドメイン'(credit). '第二・第一レベルドメイン'(cu). '第二・第一レベルドメイン'(cv). '第二・第一レベルドメイン'(cw). '第二・第一レベルドメイン'(cx). '第二・第一レベルドメイン'(cy). '第二・第一レベルドメイン'(cym). '第二・第一レベルドメイン'(cymr). '第二・第一レベルドメイン'(cymru). '第二・第一レベルドメイン'(cz). '第二・第一レベルドメイン'(d). '第二・第一レベルドメイン'(de). '第二・第一レベルドメイン'('de.'). '第二・第一レベルドメイン'('de.c'). '第二・第一レベルドメイン'('de.co'). '第二・第一レベルドメイン'('de.com'). '第二・第一レベルドメイン'(den). '第二・第一レベルドメイン'(dent). '第二・第一レベルドメイン'(denta). '第二・第一レベルドメイン'(dental). '第二・第一レベルドメイン'(dj). '第二・第一レベルドメイン'(dk). '第二・第一レベルドメイン'(dm). '第二・第一レベルドメイン'(do). '第二・第一レベルドメイン'(dow). '第二・第一レベルドメイン'(down). '第二・第一レベルドメイン'(downl). '第二・第一レベルドメイン'(downlo). '第二・第一レベルドメイン'(downloa). '第二・第一レベルドメイン'(download). '第二・第一レベルドメイン'(du). '第二・第一レベルドメイン'(dub). '第二・第一レベルドメイン'(duba). '第二・第一レベルドメイン'(dubai). '第二・第一レベルドメイン'(dz). '第二・第一レベルドメイン'(e). '第二・第一レベルドメイン'(ec). '第二・第一レベルドメイン'(eco). '第二・第一レベルドメイン'(ed). '第二・第一レベルドメイン'(edu). '第二・第一レベルドメイン'(ee). '第二・第一レベルドメイン'(eg). '第二・第一レベルドメイン'(em). '第二・第一レベルドメイン'(ema). '第二・第一レベルドメイン'(emar). '第二・第一レベルドメイン'(emara). '第二・第一レベルドメイン'(emarat). '第二・第一レベルドメイン'(es). '第二・第一レベルドメイン'(eu). '第二・第一レベルドメイン'('eu.'). '第二・第一レベルドメイン'('eu.c'). '第二・第一レベルドメイン'('eu.co'). '第二・第一レベルドメイン'('eu.com'). '第二・第一レベルドメイン'(ev). '第二・第一レベルドメイン'(eve). '第二・第一レベルドメイン'(even). '第二・第一レベルドメイン'(event). '第二・第一レベルドメイン'(events). '第二・第一レベルドメイン'(f). '第二・第一レベルドメイン'(fi). '第二・第一レベルドメイン'(fil). '第二・第一レベルドメイン'(film). '第二・第一レベルドメイン'(fl). '第二・第一レベルドメイン'(fli). '第二・第一レベルドメイン'(flig). '第二・第一レベルドメイン'(fligh). '第二・第一レベルドメイン'(flight). '第二・第一レベルドメイン'(flights). '第二・第一レベルドメイン'(fly). '第二・第一レベルドメイン'(fm). '第二・第一レベルドメイン'(fo). '第二・第一レベルドメイン'(foo). '第二・第一レベルドメイン'(food). '第二・第一レベルドメイン'(foot). '第二・第一レベルドメイン'(footb). '第二・第一レベルドメイン'(footba). '第二・第一レベルドメイン'(footbal). '第二・第一レベルドメイン'(football). '第二・第一レベルドメイン'(for). '第二・第一レベルドメイン'(foru). '第二・第一レベルドメイン'(forum). '第二・第一レベルドメイン'(fr). '第二・第一レベルドメイン'(fre). '第二・第一レベルドメイン'(free). '第二・第一レベルドメイン'(fri). '第二・第一レベルドメイン'(frie). '第二・第一レベルドメイン'(frien). '第二・第一レベルドメイン'(friend). '第二・第一レベルドメイン'(friends). '第二・第一レベルドメイン'(fu). '第二・第一レベルドメイン'(fun). '第二・第一レベルドメイン'(fund). '第二・第一レベルドメイン'(fut). '第二・第一レベルドメイン'(futb). '第二・第一レベルドメイン'(futbo). '第二・第一レベルドメイン'(futbol). '第二・第一レベルドメイン'(g). '第二・第一レベルドメイン'(ga). '第二・第一レベルドメイン'(gam). '第二・第一レベルドメイン'(game). '第二・第一レベルドメイン'(gay). '第二・第一レベルドメイン'(gd). '第二・第一レベルドメイン'(ge). '第二・第一レベルドメイン'(gen). '第二・第一レベルドメイン'(gent). '第二・第一レベルドメイン'(gf). '第二・第一レベルドメイン'(gg). '第二・第一レベルドメイン'(gl). '第二・第一レベルドメイン'(gm). '第二・第一レベルドメイン'(gmb). '第二・第一レベルドメイン'(gmbh). '第二・第一レベルドメイン'(go). '第二・第一レベルドメイン'(gol). '第二・第一レベルドメイン'(gold). '第二・第一レベルドメイン'(gov). '第二・第一レベルドメイン'(gp). '第二・第一レベルドメイン'(gr). '第二・第一レベルドメイン'('gr.'). '第二・第一レベルドメイン'('gr.c'). '第二・第一レベルドメイン'('gr.co'). '第二・第一レベルドメイン'('gr.com'). '第二・第一レベルドメイン'(gs). '第二・第一レベルドメイン'(gt). '第二・第一レベルドメイン'(gy). '第二・第一レベルドメイン'(h). '第二・第一レベルドメイン'(he). '第二・第一レベルドメイン'(hel). '第二・第一レベルドメイン'(hels). '第二・第一レベルドメイン'(helsi). '第二・第一レベルドメイン'(helsin). '第二・第一レベルドメイン'(helsink). '第二・第一レベルドメイン'(helsinki). '第二・第一レベルドメイン'(hi). '第二・第一レベルドメイン'(hiv). '第二・第一レベルドメイン'(hk). '第二・第一レベルドメイン'(hn). '第二・第一レベルドメイン'(ho). '第二・第一レベルドメイン'(hoc). '第二・第一レベルドメイン'(hock). '第二・第一レベルドメイン'(hocke). '第二・第一レベルドメイン'(hockey). '第二・第一レベルドメイン'(hol). '第二・第一レベルドメイン'(holi). '第二・第一レベルドメイン'(holid). '第二・第一レベルドメイン'(holida). '第二・第一レベルドメイン'(holiday). '第二・第一レベルドメイン'(hor). '第二・第一レベルドメイン'(hors). '第二・第一レベルドメイン'(horse). '第二・第一レベルドメイン'(hos). '第二・第一レベルドメイン'(hosp). '第二・第一レベルドメイン'(hospi). '第二・第一レベルドメイン'(hospit). '第二・第一レベルドメイン'(hospita). '第二・第一レベルドメイン'(hospital). '第二・第一レベルドメイン'(hot). '第二・第一レベルドメイン'(hote). '第二・第一レベルドメイン'(hotel). '第二・第一レベルドメイン'(hou). '第二・第一レベルドメイン'(hous). '第二・第一レベルドメイン'(house). '第二・第一レベルドメイン'(hr). '第二・第一レベルドメイン'(ht). '第二・第一レベルドメイン'(hu). '第二・第一レベルドメイン'(i). '第二・第一レベルドメイン'(ie). '第二・第一レベルドメイン'(im). '第二・第一レベルドメイン'(in). '第二・第一レベルドメイン'(inc). '第二・第一レベルドメイン'(inf). '第二・第一レベルドメイン'(info). '第二・第一レベルドメイン'(ins). '第二・第一レベルドメイン'(insu). '第二・第一レベルドメイン'(insur). '第二・第一レベルドメイン'(insure). '第二・第一レベルドメイン'(io). '第二・第一レベルドメイン'(iq). '第二・第一レベルドメイン'(ir). '第二・第一レベルドメイン'(iri). '第二・第一レベルドメイン'(iris). '第二・第一レベルドメイン'(irish). '第二・第一レベルドメイン'(is). '第二・第一レベルドメイン'(isl). '第二・第一レベルドメイン'(isla). '第二・第一レベルドメイン'(islam). '第二・第一レベルドメイン'(ist). '第二・第一レベルドメイン'(ista). '第二・第一レベルドメイン'(istan). '第二・第一レベルドメイン'(istanb). '第二・第一レベルドメイン'(istanbu). '第二・第一レベルドメイン'(istanbul). '第二・第一レベルドメイン'(it). '第二・第一レベルドメイン'(j). '第二・第一レベルドメイン'(je). '第二・第一レベルドメイン'(jo). '第二・第一レベルドメイン'(job). '第二・第一レベルドメイン'(jobs). '第二・第一レベルドメイン'(jp). '第二・第一レベルドメイン'(k). '第二・第一レベルドメイン'(kg). '第二・第一レベルドメイン'(ki). '第二・第一レベルドメイン'(kit). '第二・第一レベルドメイン'(kitc). '第二・第一レベルドメイン'(kitch). '第二・第一レベルドメイン'(kitche). '第二・第一レベルドメイン'(kitchen). '第二・第一レベルドメイン'(kn). '第二・第一レベルドメイン'(ko). '第二・第一レベルドメイン'(koe). '第二・第一レベルドメイン'(koel). '第二・第一レベルドメイン'(koeln). '第二・第一レベルドメイン'(kr). '第二・第一レベルドメイン'(ky). '第二・第一レベルドメイン'(kz). '第二・第一レベルドメイン'(l). '第二・第一レベルドメイン'(la). '第二・第一レベルドメイン'(lat). '第二・第一レベルドメイン'(law). '第二・第一レベルドメイン'(lc). '第二・第一レベルドメイン'(li). '第二・第一レベルドメイン'(lim). '第二・第一レベルドメイン'(limi). '第二・第一レベルドメイン'(limit). '第二・第一レベルドメイン'(limite). '第二・第一レベルドメイン'(limited). '第二・第一レベルドメイン'(lk). '第二・第一レベルドメイン'(lo). '第二・第一レベルドメイン'(lon). '第二・第一レベルドメイン'(lond). '第二・第一レベルドメイン'(londo). '第二・第一レベルドメイン'(london). '第二・第一レベルドメイン'(lot). '第二・第一レベルドメイン'(lott). '第二・第一レベルドメイン'(lotto). '第二・第一レベルドメイン'(lt). '第二・第一レベルドメイン'(lu). '第二・第一レベルドメイン'(lv). '第二・第一レベルドメイン'(ly). '第二・第一レベルドメイン'(m). '第二・第一レベルドメイン'(ma). '第二・第一レベルドメイン'(mc). '第二・第一レベルドメイン'(md). '第二・第一レベルドメイン'(me). '第二・第一レベルドメイン'(med). '第二・第一レベルドメイン'(medi). '第二・第一レベルドメイン'(medic). '第二・第一レベルドメイン'(medica). '第二・第一レベルドメイン'(medical). '第二・第一レベルドメイン'(mel). '第二・第一レベルドメイン'(melb). '第二・第一レベルドメイン'(melbo). '第二・第一レベルドメイン'(melbou). '第二・第一レベルドメイン'(melbour). '第二・第一レベルドメイン'(melbourn). '第二・第一レベルドメイン'(melbourne). '第二・第一レベルドメイン'(men). '第二・第一レベルドメイン'(menu). '第二・第一レベルドメイン'(mg). '第二・第一レベルドメイン'(mi). '第二・第一レベルドメイン'(mia). '第二・第一レベルドメイン'(miam). '第二・第一レベルドメイン'(miami). '第二・第一レベルドメイン'(mk). '第二・第一レベルドメイン'(mn). '第二・第一レベルドメイン'(mo). '第二・第一レベルドメイン'(mob). '第二・第一レベルドメイン'(mobi). '第二・第一レベルドメイン'(mos). '第二・第一レベルドメイン'(mosc). '第二・第一レベルドメイン'(mosco). '第二・第一レベルドメイン'(moscow). '第二・第一レベルドメイン'(mp). '第二・第一レベルドメイン'(ms). '第二・第一レベルドメイン'(mu). '第二・第一レベルドメイン'(mus). '第二・第一レベルドメイン'(musi). '第二・第一レベルドメイン'(music). '第二・第一レベルドメイン'(mv). '第二・第一レベルドメイン'(mw). '第二・第一レベルドメイン'(mx). '第二・第一レベルドメイン'(my). '第二・第一レベルドメイン'(n). '第二・第一レベルドメイン'(na). '第二・第一レベルドメイン'(nam). '第二・第一レベルドメイン'(name). '第二・第一レベルドメイン'(ne). '第二・第一レベルドメイン'(net). '第二・第一レベルドメイン'('net.'). '第二・第一レベルドメイン'('net.a'). '第二・第一レベルドメイン'('net.au'). '第二・第一レベルドメイン'('net.b'). '第二・第一レベルドメイン'('net.bn'). '第二・第一レベルドメイン'('net.br'). '第二・第一レベルドメイン'('net.c'). '第二・第一レベルドメイン'('net.cm'). '第二・第一レベルドメイン'('net.cn'). '第二・第一レベルドメイン'('net.g'). '第二・第一レベルドメイン'('net.gt'). '第二・第一レベルドメイン'('net.h'). '第二・第一レベルドメイン'('net.hk'). '第二・第一レベルドメイン'('net.i'). '第二・第一レベルドメイン'('net.il'). '第二・第一レベルドメイン'('net.m'). '第二・第一レベルドメイン'('net.mx'). '第二・第一レベルドメイン'('net.n'). '第二・第一レベルドメイン'('net.nz'). '第二・第一レベルドメイン'('net.p'). '第二・第一レベルドメイン'('net.ph'). '第二・第一レベルドメイン'('net.u'). '第二・第一レベルドメイン'('net.uk'). '第二・第一レベルドメイン'(new). '第二・第一レベルドメイン'(news). '第二・第一レベルドメイン'(nl). '第二・第一レベルドメイン'(no). '第二・第一レベルドメイン'(nom). '第二・第一レベルドメイン'('nom.'). '第二・第一レベルドメイン'('nom.e'). '第二・第一レベルドメイン'('nom.es'). '第二・第一レベルドメイン'(nr). '第二・第一レベルドメイン'(nu). '第二・第一レベルドメイン'(o). '第二・第一レベルドメイン'(or). '第二・第一レベルドメイン'(org). '第二・第一レベルドメイン'('org.'). '第二・第一レベルドメイン'('org.b'). '第二・第一レベルドメイン'('org.bn'). '第二・第一レベルドメイン'('org.c'). '第二・第一レベルドメイン'('org.cn'). '第二・第一レベルドメイン'('org.e'). '第二・第一レベルドメイン'('org.es'). '第二・第一レベルドメイン'('org.i'). '第二・第一レベルドメイン'('org.il'). '第二・第一レベルドメイン'('org.l'). '第二・第一レベルドメイン'('org.lv'). '第二・第一レベルドメイン'('org.n'). '第二・第一レベルドメイン'('org.nz'). '第二・第一レベルドメイン'('org.p'). '第二・第一レベルドメイン'('org.ph'). '第二・第一レベルドメイン'('org.pl'). '第二・第一レベルドメイン'('org.u'). '第二・第一レベルドメイン'('org.uk'). '第二・第一レベルドメイン'(orga). '第二・第一レベルドメイン'(organ). '第二・第一レベルドメイン'(organi). '第二・第一レベルドメイン'(organic). '第二・第一レベルドメイン'(p). '第二・第一レベルドメイン'(pa). '第二・第一レベルドメイン'(par). '第二・第一レベルドメイン'(pari). '第二・第一レベルドメイン'(paris). '第二・第一レベルドメイン'(pe). '第二・第一レベルドメイン'(ph). '第二・第一レベルドメイン'(pho). '第二・第一レベルドメイン'(phot). '第二・第一レベルドメイン'(photo). '第二・第一レベルドメイン'(pi). '第二・第一レベルドメイン'(pin). '第二・第一レベルドメイン'(pink). '第二・第一レベルドメイン'(piz). '第二・第一レベルドメイン'(pizz). '第二・第一レベルドメイン'(pizza). '第二・第一レベルドメイン'(pk). '第二・第一レベルドメイン'(pl). '第二・第一レベルドメイン'(pm). '第二・第一レベルドメイン'(pn). '第二・第一レベルドメイン'(po). '第二・第一レベルドメイン'(pok). '第二・第一レベルドメイン'(poke). '第二・第一レベルドメイン'(poker). '第二・第一レベルドメイン'(por). '第二・第一レベルドメイン'(porn). '第二・第一レベルドメイン'(pr). '第二・第一レベルドメイン'(pro). '第二・第一レベルドメイン'(ps). '第二・第一レベルドメイン'(pt). '第二・第一レベルドメイン'(pu). '第二・第一レベルドメイン'(pub). '第二・第一レベルドメイン'(pw). '第二・第一レベルドメイン'(q). '第二・第一レベルドメイン'(qa). '第二・第一レベルドメイン'(qu). '第二・第一レベルドメイン'(que). '第二・第一レベルドメイン'(queb). '第二・第一レベルドメイン'(quebe). '第二・第一レベルドメイン'(quebec). '第二・第一レベルドメイン'(r). '第二・第一レベルドメイン'(re). '第二・第一レベルドメイン'(rei). '第二・第一レベルドメイン'(reis). '第二・第一レベルドメイン'(reise). '第二・第一レベルドメイン'(rep). '第二・第一レベルドメイン'(repo). '第二・第一レベルドメイン'(repor). '第二・第一レベルドメイン'(report). '第二・第一レベルドメイン'(res). '第二・第一レベルドメイン'(rest). '第二・第一レベルドメイン'(resta). '第二・第一レベルドメイン'(restau). '第二・第一レベルドメイン'(restaur). '第二・第一レベルドメイン'(restaura). '第二・第一レベルドメイン'(restauran). '第二・第一レベルドメイン'(restaurant). '第二・第一レベルドメイン'(ro). '第二・第一レベルドメイン'(rom). '第二・第一レベルドメイン'(roma). '第二・第一レベルドメイン'(rs). '第二・第一レベルドメイン'(ru). '第二・第一レベルドメイン'(rug). '第二・第一レベルドメイン'(rugb). '第二・第一レベルドメイン'(rugby). '第二・第一レベルドメイン'(ruh). '第二・第一レベルドメイン'(ruhr). '第二・第一レベルドメイン'(rw). '第二・第一レベルドメイン'(s). '第二・第一レベルドメイン'(sa). '第二・第一レベルドメイン'(sc). '第二・第一レベルドメイン'(sco). '第二・第一レベルドメイン'(scot). '第二・第一レベルドメイン'(sd). '第二・第一レベルドメイン'(se). '第二・第一レベルドメイン'(sec). '第二・第一レベルドメイン'(secu). '第二・第一レベルドメイン'(secur). '第二・第一レベルドメイン'(secure). '第二・第一レベルドメイン'(sg). '第二・第一レベルドメイン'(sh). '第二・第一レベルドメイン'(sho). '第二・第一レベルドメイン'(shoe). '第二・第一レベルドメイン'(shoes). '第二・第一レベルドメイン'(shop). '第二・第一レベルドメイン'(si). '第二・第一レベルドメイン'(sk). '第二・第一レベルドメイン'(ska). '第二・第一レベルドメイン'(skat). '第二・第一レベルドメイン'(skate). '第二・第一レベルドメイン'(ski). '第二・第一レベルドメイン'(sl). '第二・第一レベルドメイン'(sm). '第二・第一レベルドメイン'(sn). '第二・第一レベルドメイン'(so). '第二・第一レベルドメイン'(sp). '第二・第一レベルドメイン'(spa). '第二・第一レベルドメイン'(spac). '第二・第一レベルドメイン'(space). '第二・第一レベルドメイン'(spo). '第二・第一レベルドメイン'(spor). '第二・第一レベルドメイン'(sport). '第二・第一レベルドメイン'(sr). '第二・第一レベルドメイン'(st). '第二・第一レベルドメイン'(sto). '第二・第一レベルドメイン'(stoc). '第二・第一レベルドメイン'(stock). '第二・第一レベルドメイン'(stockh). '第二・第一レベルドメイン'(stockho). '第二・第一レベルドメイン'(stockhol). '第二・第一レベルドメイン'(stockholm). '第二・第一レベルドメイン'(su). '第二・第一レベルドメイン'(sup). '第二・第一レベルドメイン'(supp). '第二・第一レベルドメイン'(suppo). '第二・第一レベルドメイン'(suppor). '第二・第一レベルドメイン'(support). '第二・第一レベルドメイン'(sur). '第二・第一レベルドメイン'(surf). '第二・第一レベルドメイン'(sv). '第二・第一レベルドメイン'(sx). '第二・第一レベルドメイン'(sy). '第二・第一レベルドメイン'(syd). '第二・第一レベルドメイン'(sydn). '第二・第一レベルドメイン'(sydne). '第二・第一レベルドメイン'(sydney). '第二・第一レベルドメイン'(t). '第二・第一レベルドメイン'(ta). '第二・第一レベルドメイン'(tat). '第二・第一レベルドメイン'(tatt). '第二・第一レベルドメイン'(tatto). '第二・第一レベルドメイン'(tattoo). '第二・第一レベルドメイン'(tc). '第二・第一レベルドメイン'(td). '第二・第一レベルドメイン'(te). '第二・第一レベルドメイン'(tel). '第二・第一レベルドメイン'(ten). '第二・第一レベルドメイン'(tenn). '第二・第一レベルドメイン'(tenni). '第二・第一レベルドメイン'(tennis). '第二・第一レベルドメイン'(tf). '第二・第一レベルドメイン'(tg). '第二・第一レベルドメイン'(th). '第二・第一レベルドメイン'(tha). '第二・第一レベルドメイン'(thai). '第二・第一レベルドメイン'(ti). '第二・第一レベルドメイン'(tir). '第二・第一レベルドメイン'(tiro). '第二・第一レベルドメイン'(tirol). '第二・第一レベルドメイン'(tj). '第二・第一レベルドメイン'(tk). '第二・第一レベルドメイン'(tl). '第二・第一レベルドメイン'(tm). '第二・第一レベルドメイン'(tn). '第二・第一レベルドメイン'(to). '第二・第一レベルドメイン'(tok). '第二・第一レベルドメイン'(toky). '第二・第一レベルドメイン'(tokyo). '第二・第一レベルドメイン'(tr). '第二・第一レベルドメイン'(tra). '第二・第一レベルドメイン'(trai). '第二・第一レベルドメイン'(train). '第二・第一レベルドメイン'(traini). '第二・第一レベルドメイン'(trainin). '第二・第一レベルドメイン'(training). '第二・第一レベルドメイン'(trav). '第二・第一レベルドメイン'(trave). '第二・第一レベルドメイン'(travel). '第二・第一レベルドメイン'(tv). '第二・第一レベルドメイン'(tw). '第二・第一レベルドメイン'(u). '第二・第一レベルドメイン'(ua). '第二・第一レベルドメイン'(ug). '第二・第一レベルドメイン'(uk). '第二・第一レベルドメイン'('uk.'). '第二・第一レベルドメイン'('uk.c'). '第二・第一レベルドメイン'('uk.co'). '第二・第一レベルドメイン'('uk.com'). '第二・第一レベルドメイン'(us). '第二・第一レベルドメイン'('us.'). '第二・第一レベルドメイン'('us.c'). '第二・第一レベルドメイン'('us.co'). '第二・第一レベルドメイン'('us.com'). '第二・第一レベルドメイン'('us.o'). '第二・第一レベルドメイン'('us.or'). '第二・第一レベルドメイン'('us.org'). '第二・第一レベルドメイン'(uy). '第二・第一レベルドメイン'(uz). '第二・第一レベルドメイン'(v). '第二・第一レベルドメイン'(vc). '第二・第一レベルドメイン'(vg). '第二・第一レベルドメイン'(vi). '第二・第一レベルドメイン'(via). '第二・第一レベルドメイン'(viaj). '第二・第一レベルドメイン'(viaje). '第二・第一レベルドメイン'(viajes). '第二・第一レベルドメイン'(vn). '第二・第一レベルドメイン'(vo). '第二・第一レベルドメイン'(voy). '第二・第一レベルドメイン'(voya). '第二・第一レベルドメイン'(voyag). '第二・第一レベルドメイン'(voyage). '第二・第一レベルドメイン'(w). '第二・第一レベルドメイン'(wa). '第二・第一レベルドメイン'(wal). '第二・第一レベルドメイン'(wale). '第二・第一レベルドメイン'(wales). '第二・第一レベルドメイン'(we). '第二・第一レベルドメイン'(web). '第二・第一レベルドメイン'('web.'). '第二・第一レベルドメイン'('web.d'). '第二・第一レベルドメイン'('web.do'). '第二・第一レベルドメイン'(wf). '第二・第一レベルドメイン'(wi). '第二・第一レベルドメイン'(wie). '第二・第一レベルドメイン'(wien). '第二・第一レベルドメイン'(win). '第二・第一レベルドメイン'(wine). '第二・第一レベルドメイン'(ws). '第二・第一レベルドメイン'(x). '第二・第一レベルドメイン'(xx). '第二・第一レベルドメイン'(xxx). '第二・第一レベルドメイン'(y). '第二・第一レベルドメイン'(yt). '第二・第一レベルドメイン'('м'). '第二・第一レベルドメイン'('мо'). '第二・第一レベルドメイン'('мос'). '第二・第一レベルドメイン'('моск'). '第二・第一レベルドメイン'('москв'). '第二・第一レベルドメイン'('москва'). '第二・第一レベルドメイン'('р'). '第二・第一レベルドメイン'('рф'). '第二・第一レベルドメイン'('с'). '第二・第一レベルドメイン'('ср'). '第二・第一レベルドメイン'('срб'). '第二・第一レベルドメイン'('香'). '第二・第一レベルドメイン'('香港'). '第二・第一レベルドメイン'('中'). '第二・第一レベルドメイン'('中国'). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1362913813/10 # # RegularExpressionでIPアドレスが正しいかどうか判断するのは無理かね? # 無理なら各オクテット切り出して0〜255の範囲にあるか地道にチェックするけど 'RegularExpressionでIPアドレスが正しいかどうか判断するのは無理かね? 無理なら各オクテット切り出して0〜255の範囲にあるか地道にチェックするけど'(_IPアドレス文字列) :- split(_IPアドレス文字列,['.'],L), count((member(N,L),integer(N),between(0,255,N)),4). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/600 # # お願いします。 # # ●正規表現の使用環境 # Javascript # # ●検索か置換か? # 検索 # # ●説明 # HMVの商品IDらしき番号を取得したい # # ●対象データ # http://ime.nu/www.hmv.co.jp/artist_松平健_000000000039225/item_マツケンサンバ-2-リミックス-トラックス-dvd_1789889 # # http://ime.nu/www.hmv.co.jp/artist_松平健_000000000039225/item_マツケンサンバ-2-リミックス-トラックス-dvd_1789889/ref/1448035_8 # # ●希望する結果 # 1789889 # # 説明 # アンダーバー以降の末尾の自然数が商品IDなのですが(これなら簡単) # リファラー付きの場合は末尾じゃなくなるので初心者の自分には難しいです。 # なお、商品IDは0(ゼロ)で桁合わせはしていません # # 'HMVの商品IDらしき番号を取得したい'(_文字列,_商品ID) :- sub_atom(_文字列,S,5,_,'/ref/'), sub_atom(_文字列,0,S,_,_文字列_1), '商品IDは最後の_から末尾までの副文字列'(_文字列_1,_商品ID),!. 'HMVの商品IDらしき番号を取得したい'(_文字列,_商品ID) :- '商品IDは最後の_から末尾までの副文字列'(_文字列,_商品ID),!. '商品IDは最後の_から末尾までの副文字列'(_文字列,_商品ID) :- atom_chars(_文字列,Chars), append(_,['_'|R1],Chars), \+(member('_',R1)), atom_chars(_商品ID,R1). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/357 # # ●正規表現の使用環境 # MSVC2012 / .NET Framework 4.5 # # ●検索か置換か? # 検索 # # ●説明 # 「|」「(」「)」が文字として入っているデータから、特定の文字列を抜き出したい。 # # ●対象データ # area|name (value) # # tokyo|yamada benzo (123) # kyoto|namae tarou (21) # saga|shitemo mitukaranai you (7) # # ●希望する結果 # area, name, value # # "tokyo", "yamada benzo", "123" # "kyoto", "namae tarou", "21" # "saga", "shitemo mitukaranai you", "7" # # このように取り出したいのですが、どのように書くとよいでしょうか # # 文字列の整形(_文字列,_整形された文字列) :- split(_文字列,['|','(',')'],L_1), 各要素の末尾の空白を取り除く(L_1,L_2), 文字列に整形する(L_2,'',_整形された文字列). 各要素の末尾の空白を取り除く([],[]). 各要素の末尾の空白を取り除く([A|R1],[B|R2]) :- 末尾の空白を取り除く(A,B), 各要素の末尾の空白を取り除く(R1,R2). 末尾の空白を取り除く(A,B) :- atom_cahrs(A,Chars), append(L1,L2,Chars), all(L2,' '), atomic_list_concat(L1,B),!. 末尾の空白を取り除く(A,A). 文字列に整形する([A],S_1,S) :- atomic_list_concat([S_1,'"',A,'"'],S),!. 文字列に整形する([A|R],S_1,S) :- atomic_list_concat([S_1,'"',A,'", '],S_2), 文字列に整形する(R,S_2,S). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/314 # # tで始まる文字列を文頭のthe[スペース]を無視して検索する場合 # ^t[^h]|^th[^e]|^the tが思いついたけど、もっといい正規表現ありますか? # # 環境はActive Perl5で否定演算子!は使えません # # 'tで始まる文字列を文頭のthe[スペース]を無視して検索する'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,0,4,R,'the '),!, sub_atom(_文字列,4,R,0,_文字列_1), sub_atom(_文字列_1,_,_,_,_前文字列,_適合文字列,_後文字列,L1,[t|R_2],L3), \+(member(' ',R_2)), \+(member('\n',R_2)), (L3 = [],L3 = [' '|_]). 'tで始まる文字列を文頭のthe[スペース]を無視して検索する'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,[t|R_2],L3), \+(member(' ',R_2)), \+(member('\n',R_2)), (L3 = [],L3 = [' '|_]). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/311 # # ●正規表現の使用環境 # 練馬、nemery等のリネームソフト # 可能なソフトに乗り換えようと思ってます # # ●検索か置換か? # 置換 # # ●説明 # 1.ファイル名末尾の数字が1桁の場合、0をつける。2桁の場合はそのまま #  ファイル名途中の数字はスルーさせたい # 2.特定の文字(例では#)から特定の文字(例では-)の前までを削除したい # # ●対象データ # キリン#◯☓動物園-10月1 # しろくま#△☓◯動物園-5月12 # 猫(2匹目)#我が家-11月5 # # ●希望する結果 # キリン-10月01 # しろくま-5月12 # 猫(2匹目)-11月05 # # よろしくお願いします # # '特定の文字(例では#)から特定の文字(例では-)の前までを削除したい'(_文字列,_特定の文字から,_特定の文字の前まで,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,[_特定の文字から|R2],[_特定の文字の前まで|_]), atomic_list_concat([S1,S3],_置換された文字列),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/311 # # ●正規表現の使用環境 # 練馬、nemery等のリネームソフト # 可能なソフトに乗り換えようと思ってます # # ●検索か置換か? # 置換 # # ●説明 # 1.ファイル名末尾の数字が1桁の場合、0をつける。2桁の場合はそのまま #  ファイル名途中の数字はスルーさせたい # 2.特定の文字(例では#)から特定の文字(例では-)の前までを削除したい # # ●対象データ # キリン#◯☓動物園-10月1 # しろくま#△☓◯動物園-5月12 # 猫(2匹目)#我が家-11月5 # # ●希望する結果 # キリン-10月01 # しろくま-5月12 # 猫(2匹目)-11月05 # # よろしくお願いします # # 'ファイル名末尾の数字が1桁の場合、0をつける。2桁の場合はそのまま ファイル名途中の数字はスルーさせたい'(_ファイル名,_置換したファイル名) :- sub_atom(_ファイル名,_,_,2,_末尾文字2桁), 数字桁数評価(_末尾文字2桁,1), atomic_list_concat([_ファイル名,'0'],_置換したファイル名),!. 'ファイル名末尾の数字が1桁の場合、0をつける。2桁の場合はそのまま ファイル名途中の数字はスルーさせたい'(_ファイル名,_ファイル名). 数字桁数評価(_末尾文字2桁,2) :- atom_number(_末尾文字2桁,_数字),!. 数字桁数評価(_末尾文字2桁,2) :- sub_atom(_末尾文字2桁,1,1,0,_末尾文字1桁), atom_number(_末尾文字1桁,_数字),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/296 # # ●正規表現の使用環境 # C# # # ●検索か置換か? # 検索 # # ●説明 # タグの外にある文字列を順に取り出したい # # ●対象データ # <hoge><hoge></hoge>あああ<hoge><hoge></hoge>いいい<hoge></hoge>ううう<hoge><hoge>・・・ # # ●希望する結果 # while (m.Success) # の繰り返しの中であああ、いいい、ううう・・・と順に取り出していきたい # # よろしくお願いします。 # # タグの外にある文字列を順に取り出したい(_文字列,_タグの外にある文字列) :- atom_chars(_文字列,Chars), タグの外にある文字列を順に取り出したい(Chars,[],_タグの外にある文字列). タグの外にある文字列を順に取り出したい([],L,_タグの外にある文字列) :- \+(L=[]), atom_chars(_タグの外にある文字列,L). タグの外にある文字列を順に取り出したい(Chars,L,_タグの外にある文字列) :- タグを読み飛ばす(Chars,_残り文字ならび), atom_chars(_タグの外にある文字列,L). タグの外にある文字列を順に取り出したい([A|R],L,_タグの外にある文字列) :- append(L,[A],L2), タグの外にある文字列を順に取り出したい(R,L2,_タグの外にある文字列). タグを読み飛ばす(Chars,_残り文字ならび) :- タグで始まっている(Chars,_タグ,_終了タグ,_タグの後の文字ならび), append(_,_終了タグ,_残り文字ならび,_タグの後文字ならび),!. タグで始まっている(Chars,_タグ,_終了タグ,_タグの後の文字ならび) :- append(['<'|R1],['>'|_タグの後の文字ならび],Chars), \+(member('<',R1)), \+(member('>',R1)), append(['<','/'|R1],['>'],_終了タグ),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/301 # # よろしくお願いします。 # # ●正規表現の使用環境 # サクラエディタ bregonig.dll Ver.3.02 # # ●検索か置換か? # 検索 # # ●説明 # "START"から"END"に囲まれた"HOGE"を最短一致(というのか?)で含まれる行を検索したい # # ●対象データ # 1.xxxxxxxSTARTyyyyyyyyHOGEzzzzzzzzzzzENDaaaaaaa # 2.xxxxxxxSTARTyyyyyyyyENDbbbbbbbHOGEzzzzzzzzzzzENDaaaaaaa # # ●希望する結果 # 1.だけマッチ # 2.は"END"が"HOGE"の前に入ってるのでマッチ対象外 # # '"START"から"END"に囲まれた"HOGE"を最短一致(というのか?)で含まれる行を検索したい '(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,'HOGE',_後文字列,_,_,_), sub_atom(_前文字列,_,_,_,_,'START',_前文字列_3,_,_,_), \+(sub_atom(_前文字列_3,_,5,_,'START')), \+(sub_atom(_前文字列_3,_,3,_,'END')), sub_atom(_後文字列,_,_,_,_後文字列_1,'END',_,_,_,_), \+(sub_atom(_後文字列_1,_,5,_,'START')),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/141 # # ●正規表現の使用環境 # C# # # ●検索か置換か? # 検索 # # ●説明 # ●▼■ の部分をマッチさせたい # # ●対象データ # ほげほげ●▼■ほげおわり # ほげほげ●▼■ほげここまで # # ●希望する結果 # ●▼■ # # ほげほげ(?<1>.+?)ほげおわり|ほげここまで # # のように書きましたがだめみたいです。 # これだと # ほげほげ(?<1>.+?)ほげおわり もしくは # ほげここまで # という風になってしまうのでしょうか? # ほげおわり か ほげここまで のどちらかという書き方を教えてほしいです。 # # '「ほげほげ」で始まり「ほげほげおわり」か「ほげほげここまで」で終わる'(_文字列,_前文字列,_検索文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), '「ほげほげ」で始まり'(S2,S2_1), '「ほげほげおわり」か「ほげほげここまで」で終わる'(S2_1), '「ほげほげ」で始まり「ほげほげおわり」か「ほげほげここまで」で終わる'(S1,S2,S3). '「ほげほげ」で始まり「ほげほげおわり」か「ほげほげここまで」で終わる'(_前文字列,_検索文字列,_後文字列,_前文字列,_検索文字列,_後文字列). '「ほげほげ」で始まり「ほげほげおわり」か「ほげほげここまで」で終わる'(S1,S2,S3,_前文字列,_検索文字列,_後文字列) :- '「ほげほげ」で始まり「ほげほげおわり」か「ほげほげここまで」で終わる'(S3,_前文字列_1,_検索文字列,_後文字列), atomic_list_concat([S1,S2,_前文字列_1],_前文字列). '「ほげほげ」で始まり'(S2,S2_1) :- sub_atom(S2,0,4,R,ほげほげ), sub_atom(S2,4,R,0,S2_1),!. '「ほげほげおわり」か「ほげほげここまで」で終わる'(S2_1) :- sub_atom(S2_1,S1,Len,0,ほげほげおわり), \+((sub_atom(S2_1,_,_,E,ほげほげ),E>3)). '「ほげほげおわり」か「ほげほげここまで」で終わる'(S2_1) :- sub_atom(S2,_,_,0,ほげほげここまで), \+((sub_atom(S2_1,_,_,E,ほげほげ),E>4)). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/110 # # '([\x8E\xA1-\xFE][\xA1-\xFE])' で、euc の2バイト文字にマッチするかと思いますが、 # このうち、「×」(\xA1DF)のみマッチさせたくないのですが、 # どのように書けばよいでしょうか? # '([0x8E0xA1-0xFE][0xA1-0xFE]) で、euc の2バイト文字にマッチするかと思いますが、このうち、「×」x0xA1DF)のみマッチさせたくないのですが、どのように書けばよいでしょうか? '(_文字列,_前文字列,_適合文字,_後文字列) :- sub_atom(_文字列,S,1,R,_適合文字), char_code(_適合文字,_文字コード), 'euc の2バイト文字にマッチするかと思いますが、このうち、「×」(0xA1DF)のみマッチさせたくない'(_文字コード), aub_atom(_文字列,0,S,_,_前文字列), sub_atom(_文字列,S+1,_,0,_後文字列). 'euc の2バイト文字にマッチするかと思いますが、このうち、「×」(0xA1DF)のみマッチさせたくない'(_文字コード) :- _文字コード >= 0x8ea1, _文字コード =< 0xa1fe, \+(_文字コード==0xa1df). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/102 # # 正規表現での置き換え文字列をランダム化する方法はありませんか? # # 例 # 検索文字列 半角スペースで挟まれたアルファベット4文字 # ( )(\w{1})(\w{1})(\w{1})(\w{1})( ) # 置き換え結果 以下から ランダムでどれかを出力 # \1●●\3\4\5 # \1●\2●\4\5 # \1●\2\3●\5 # \1\2●●\4\5 # \1\2●\3●\5 # \1\2\3●●\5 # 分かる方いましたらお願いします。 # サクラエディタつかってますが # 半角スペースで挟まれたアルファベット4文字ランダムに置換候補文字列に置き換える(_文字列,A,B,C,D,E,F,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,[' '|R2],L3), append(L1_1,[' '],R2), \+(member(' ',L1_1)), ランダムに置換候補文字列を得る(A,B,C,D,E,F,_置換候補文字列), 半角スペースで挟まれたアルファベット4文字ランダムに置換候補文字列に置き換える(S3,A,B,C,D,E,F,_置換された文字列_2), atomic_list_concat([S1,' ',_置換候補文字列,' ',_置換された文字列_2],_置換された文字列),!. 半角スペースで挟まれたアルファベット4文字ランダムに置換候補文字列に置き換える(_文字列,A,B,C,D,E,F,_文字列). ランダムに置換候補文字列を得る(A,B,C,D,E,F,_置換候補文字列) :- R is random(6) + 1, 置換候補文字列(R,A,B,C,D,E,F,_置換候補文字列). 置換候補文字列(1,A,B,C,D,E,_文字列) :- atomic_list_concat([A,●●,C,D,E],__文字列),!. 置換候補文字列(2,A,B,C,D,E,_文字列) :- atomic_list_concat([A,●,B,●,D,E],__文字列),!. 置換候補文字列(3,A,B,C,D,E,_文字列) :- atomic_list_concat([A,B,●,C,●,E],__文字列),!. 置換候補文字列(4,A,B,C,D,E,_文字列) :- atomic_list_concat([A,B,●●,D,E],__文字列),!. 置換候補文字列(5,A,B,C,D,E,_文字列) :- atomic_list_concat([A,●,C,D,●,E],__文字列),!. 置換候補文字列(6,A,B,C,D,E,_文字列) :- atomic_list_concat([A,B,C,●●,E],__文字列),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/97 # # 最後に○○がつくけどマッチング文字列に含めないってどうすればいいんでしったっけ # # 末尾に指定要素があるがそれを除いた文字列(_文字列,_末尾の指定要素,_末尾の指定要素を除いた文字列) :- sub_atom(_文字列,_開始位置,_文字列長,0,_末尾の指定文字列), sub_atom(_文字列,0,_開始位置,_,_末尾の指定要素を除いた文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/71 # # 数値比較を正規表現だけでやることになって、たった4桁なのに泣きそう。 # # '数値比較を正規表現だけでやることになって、たった4桁なのに泣きそう。'(_4桁ブラス4桁の数字列,_診断) :- atom_chars(_4桁ブラス4桁の数字列,[A,B,C,D,E,F,G,H]), '診断: 4桁の数字ならび比較'([A,B,C,D],[E,F,G,H],_診断),!. '診断: 4桁の数字ならび比較'(L,L,=) :- !. '診断: 4桁の数字ならび比較'(L1,L2,<) :- L1 @< L2,!. '診断: 4桁の数字ならび比較'(L1,L2,>) :- L1 @> L2,!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/28 # # ../test/read.cgi/tech/1340383120/27 # うあ!早々にありがとうございます。 # あまえついでに検索対象が「単語」になった場合はどうしたら良いでしょうか? # # # ●正規表現の使用環境 # Java7 # # ●検索か置換か? # 検索 # # ●説明 # # 複数ある文字行からの検索で【単語A】【単語B】をand/or検出 # # ●対象データ # # むかしむかし、おじいさんは山に芝刈りに、おばあさんは川に洗濯に行きました(改行)浦島太郎はかめにのって海に出て行きました(改行) # そうすると、おじいさんは「わたしは小さなつづらでよい」といいました(改行) # # ●希望する結果 # # 「おじいさん」and「おばあさん」 # むかしむかし、おじいさんは山に芝刈りに、おばあさんは川に洗濯に行きました(改行) # 「おじいさん」or 「おばあさん」 # むかしむかし、おじいさんは山に芝刈りに、おばあさんは川に洗濯に行きました(改行)そうすると、おじいさんは「わたしは小さなつづらでよい」といいました(改行) # '複数ある文字行からの検索で一行中に「おじいさん」and 「おばあさん」を含む行を抽出する方法'(_複数ある文字行,_適合行) :- split(_複数ある文字列,['\n'],_文字行ならび), member(_適合行,_文字行ならび), '一行中に「おじいさん」and 「おばあさん」を含む行を'(_適合行). '一行中に「おじいさん」and 「おばあさん」を含む行を'(_文字行) :- sub_atom(_文字行,_,_,_,'おじいさん'), sub_atom(_文字行,_,_,_,'おばあさん'),!. '複数ある文字行からの検索で一行中に「おじいさん」or 「おばあさん」を含む行を抽出する方法'(_複数ある文字行,_適合行) :- split(_複数ある文字列,['\n'],_文字行ならび), member(_適合行,_文字行ならび), '一行中に「おじいさん」or 「おばあさん」を含む行を'(_適合行). '一行中に「おじいさん」or 「おばあさん」を含む行を'(_文字行) :- sub_atom(_文字行,_,_,_,おじいさん),!, '一行中に「おじいさん」or 「おばあさん」を含む行を'(_文字行) :- sub_atom(_文字行,_,_,_,おばあさん),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1340383120/26 # # 教えてください。複数行からのある文字列を含んだ # 行の検索の記述方法です # # ●正規表現の使用環境 # Java7 # # ●検索か置換か? # 検索 # # ●説明 # 複数ある文字行からの検索で # 一行中に[A]and[C]を含む行を抽出する方法 # 一行中に[K]or[S]を含む行を抽出する方法 # # # ●対象データ # ABCDEFG # HIJKLMN # OPQRSTU # # ●希望する結果 # ABCDEFG (A and C) # HIJKLMN と OPQRSTU  (K or S) # # # # '複数ある文字行からの検索で一行中に[A]and[C]を含む行を抽出する方法'(_複数ある文字行,_適合行) :- split(_複数ある文字列,['\n'],_文字行ならび), member(_適合行,_文字行ならび), '一行中に[A]and[C]を含む行を'(_適合行). '一行中に[A]and[C]を含む行を'(_文字行) :- sub_atom(_文字行,_,1,_,'A'), sub_atom(_文字行,_,1,_,'C'),!. '複数ある文字行からの検索で一行中に[K]or[S]を含む行を抽出する方法'(_複数ある文字行,_適合行) :- split(_複数ある文字列,['\n'],_文字行ならび), member(_適合行,_文字行ならび), '一行中に[K]or[S]を含む行を'(_適合行). '一行中に[K]or[S]を含む行を'(_文字行) :- sub_atom(_文字行,_,1,_,'K'),!, '一行中に[K]or[S]を含む行を'(_文字行) :- sub_atom(_文字行,_,1,_,'S'),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/930 # # ((角|丸)ゴシック|明朝) # # こういった入れ子?を書くと例えば丸ゴシックにマッチしますが丸にもマッチします # どのように書けばよいのでしょう '((角|丸)ゴシック|明朝)の内、角ゴシック|丸ゴシック|明朝に適合する'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,S,Len,R,_適合文字列_1), '診断: 適合'(_適合文字列_1), sub_atom(_文字列,0,S,_,_前文字列_1), S_2 is S + Len, sub_atom(_文字列,S_2,R,0,_後文字列_1), '((角|丸)ゴシック|明朝)の内、角ゴシック|丸ゴシック|明朝に適合する'(_文字列,S,Len,R,_前文字列_1,_適合文字列_1,_後文字列_1,_前文字列,_適合文字列,_後文字列). '((角|丸)ゴシック|明朝)の内、角ゴシック|丸ゴシック|明朝に適合する'(_文字列,_前文字列,_適合文字列,_後文字列,_前文字列,_適合文字列,_後文字列). '((角|丸)ゴシック|明朝)の内、角ゴシック|丸ゴシック|明朝に適合する'(_文字列,_前文字列_1,_適合文字列_1,_後文字列_1,_前文字列,_適合文字列,_後文字列) :- '((角|丸)ゴシック|明朝)の内、角ゴシック|丸ゴシック|明朝に適合する'(_後文字列_1,_前文字列_2,_適合文字列,_後文字列), atomic_list_concat([_前文字列_1,_適合文字列_1,_前文字列_2],_前文字列). '診断: 適合'(_文字列) :- 接頭候補(_接頭候補), atomic_list_concat([_接頭候補,ゴシック],_文字列). '診断: 適合'(明朝). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/921 # # ●正規表現の使用環境 # 鬼車 # # ●検索か置換か? # 検索 # # ●対象データ # あああかか # うううきき # いいいくく # # ●希望する結果(あああ いいい うううをマッチさせる & きき くく の文字を含まない) # あああ # (あああ の部分のみマッチ) # # ●説明 # 複数の文字(文字列1)をマッチさせたい、そして # その文字列中で、指定した文字が入ってたとき、その文字(文字列1)はマッチしないということは可能でしょうか。 # # [例文] # あああかか # うううきき # いいいくく # # ↓構文はnot使ったりと正規表現と関係無くて申し訳ないですが自分のイメージ的にはこんな感じです。 # ( (あああ|いいい|ううう) (not (きき|くく)) ) # # この場合、「あああかか(正確には あああ の部分のみ)」がマッチとなり、 # 文字列中に「きき、くく」が文字列に含まれる # 「うううきき(正確には ううう の部分)」と「いいいくく(正確には いいい の部分)」はマッチさせない感じです。 # # 調べた感じですと、否定文を使う形になるとは思いますが、否定文が結構複雑そうで、 # それに複数の否定を加えるようだとかなり難しいように感じますが、実際に # このような正規表現を実現出来るか不安なのですが、実現可能でしょうか。 # また、もし上記を満たす正規表現が分かる方おりましたら教えて頂ければ幸いです。 # どうぞよろしくお願い致します。 文字列ならびの検索([_適合文字列|R],_適合文字列) :- \+(sub_atom(_適合文字列,_,2,_,きき)), \+(sub_atom(_適合文字列,_,2,_,くく)), 適合文字列(_適合文字列). 文字列ならびの検索([_文字列|R],_適合文字列) :- 文字列ならびの検索(R,_適合文字列). 適合文字列(_文字列) :- sub_atom(_文字列,0,3,_,あああ),!. 適合文字列(_文字列) :- sub_atom(_文字列,0,3,_,いいい),!. 適合文字列(_文字列) :- sub_atom(_文字列,0,3,_,ううう),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/896 # # すみません # Objective-CのNSRegularExpressionで、ある文字列について、 # ・順番通りに # ・一部が欠けてもよく # ・途中に余計な文字が入ってもよく # ・一致する数を数える # ようなパターンを組みたいのですが、 # 例えばABCDEという文字列があったとして # ABCDE→5(全件一致) # AABBCCDDEE→5(全件一致) # ADCBE→3(A,C,Eが一致) # AFGHBCDE→5(全件一致) # EDCBA→1(Eのみ一致) # というように数えたいのですが、上手くいきません。 # .*?(A)?.*?(B)?.*?(C)?.*?(D)?.*?(E)?.*? # ではダメみたいなのですがどうするのが正しいでしょうか # # '・順番通りに ・一部が欠けてもよく ・途中に余計な文字が入ってもよく ・一致する数を数えるようなパターンを評価する'(_文字列,_パターン,_評価) :- atom_chars(_文字列,Chars), 指定検索パターンの昇順要素のみ評価する('A',Chars,['A','B','C','D','E'],_重複可能なパターン), パターン評価(_重複可能なパターン,_パターン,_評価). 指定検索パターンの昇順要素のみ評価する(_,[],[]). 指定検索パターンの昇順要素のみ評価する(U,[A|R1],_検索文字ならび,[A|R2]) :- member(A,_検索文字ならび), U @=< A, 指定検索パターンの昇順要素のみ評価する(A,R1,_検索文字ならび,R2). 指定検索パターンの昇順要素のみ評価する(U,[A|R1],_検索文字ならび,R2) :- member(A,_検索文字ならび)), U @> A, 指定検索パターンの昇順要素のみ評価する(U,R1,_検索文字ならび,R2). 指定検索パターンの昇順要素のみ評価する(U,[A|R1],_検索文字ならび,R2) :- \+(member(A,_検索文字ならび)), 指定検索パターンの昇順要素のみ評価する(U,R1,_検索文字ならび,R2). パターン評価(_重複可能なパターン,_検索文字ならび,_パターン,_評価) :- 重複する文字を取り除く(_重複可能なパターン,_パターン), length(_パターン,_パターンの文字数), length(_検索文字ならび,_全件数), 評価(_パターンの文字数,_全件数,_評価). 重複する文字を取り除く(_重複可能なパターン,_パターン) :- setof(A,member(A,_重複可能なパターン),_パターン). 評価(_全件数,_全件数,全件一致). 評価(_パターンの文字数,_,_評価) :- atomic_list_concat([_パターンの文字数,件一致],_評価). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/862 # # 以下のように検索と置換をしたいのですが # name0 name1 name2が順番が異なる時どのような正規表現をかけばよいでしょうか # # <en_Image name0="image.png" name1="カツ丼" name2="ご飯"></en_Image> # <en_Image name0="image.png" name2="ご飯" name1="カツ丼"></en_Image> # <en_Image name2="ご飯" name1="カツ丼" name0="image.png"></en_Image> #             ↓ # <en_Image name="カツ丼ご飯image.png"></en_Image> # # name0 name1 name2が順番が異なる時,以下のような正規表現では取り出せますん # pattern="<en_Image.*?name0=\"(\\w+?).*?name1=\"(\\w+?).*?name2=\"(\\w+?)">.*?</en_Image>" # replace="<en_Image name==\"$2$3.$1\"></en_Image>" # # # 'name0 name1 name2が順番が異なる時の検索と置換'(_文字列,_置換文字列) :- sPLIT(_文字列,[''],L), 置換(L,L1), atomic_list_concat(L1,_置換された文字列). 置換([],[]) :- !. 置換([A1,B1,' ',A2,B2,' ',A3,C3|R1],['name="カツ丼ご飯image.png"'|R2]) :- 条件_1([A1,A2,A3]), 条件_2([B1,B2,B3]), 置換(R1,R2),!. 置換([A|R1],[A|R2]) :- 置換(R1,R2). 条件_1([]) :- !. 条件_1([A|R]) :- member(A,['name0=','name1=','name2=']), 条件_1(R). 条件_2([]) :- !. 条件_2([A|R]) :- member(A,['image.png','ご飯','カツ丼']), 条件_2(R). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/814 # # しばらくずっとプログラミングしてなかったもので、正規表現を忘れてしまったのですが、PHPにて # # Japanese system that # <a title=" どうやら〜らしい" style="text-decoration: underline" href="javascript:;">apparently</a> # # のような文章で、両<a>タグを除去して(apparentlyは残す)、テキストだけにしたいのですが、どのように書けばいいでしょうか? # 両タグを除去する(_文字列,_両タグを除去された文字列) :- search(_文字列,[<,a],S2_2,[<,/,a,>],S1,S2,S3,L1,L2,L3), search(S2_2,[>],S2_3,[],_,_,_,_,_,_), atomic_list_concat([S1,S2_3,S3],_両タグを除去された文字列). % search/10 % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/792 # # ABCが登場したらその後に登場する全てのDEFをXYZへ置換するにはどうしたらいいのん? # # xkdmeABCidkDEFledxaoDEFasdDEF # ↓ # xkdmeABCidkXYZledxaoXYZasdXYZ # # 'ABCが登場したらその後に登場する全てのDEFをXYZへ置換するにはどうしたらいいのん? '(_文字列,_置換された文字列) :- sub_atom(_文字列,S1,'ABC',S2),!, その後に登場する全てのDEFをXYZへ置換する(S2,S3), atom_list_concat([S1,'ABC',S3],_置換された文字列). 'ABCが登場したらその後に登場する全てのDEFをXYZへ置換するにはどうしたらいいのん? '(_文字列,_文字列). その後に登場する全てのDEFをXYZへ置換する(_文字列,_置換された文字列) :- 決定性の全置換(_文字列,'DEF','XYZ',_置換された文字列). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 決定性の全置換(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- sub_atom(_文字列,Start,Length,Rest,_置換対象文字列), sub_atom(_文字列,0,Start,_,S1), Start_S3 is Start + Length, sub_atom(_文字列,Start_S3,Rest,0,S3), 決定性の全置換(S3,_置換対象文字列,_置換文字列,_置換された文字列_2), atomic_list_concat([S1,_置換文字列,_置換された文字列_2],_置換された文字列),!. 決定性の全置換(_文字列,_,_,_文字列). % sub_atom/4 % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/786 # # \rが30回登場したら30回目より後ろの文字を削除したいんですがどう記述したら良いでしょう。 # \rから次の\r間には任意の文字数の文字列があります # 言語はパールです # # $s =~ s/(((.*?)\r){3})(.*$)//s; # print "$1\n$2\n$3\n$4\n"; # これではだめでした # # # 'キャリッジ・リターンが30回登場したら30回目より後ろの文字を削除したい'(_文字列,_末尾を削除された文字列) :- length(Ln,30), 'キャリッジ・リターンが30回登場したら30回目より後ろの文字を削除したい'(Ln,_文字列,_末尾を削除された文字列). 'キャリッジ・リターンが30回登場したら30回目より後ろの文字を削除したい'([],_文字列,_文字列) :- !. 'キャリッジ・リターンが30回登場したら30回目より後ろの文字を削除したい'([_|Ln],_文字列,_末尾を削除された文字列) :- sub_atom(_文字列,_,1,R,'\n'), sub_atom(_文字列,_,R,0,_残り文字列), 'キャリッジ・リターンが30回登場したら30回目より後ろの文字を削除したい'(Ln,_残り文字列,_末尾を削除された文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/786 # # \rが30回登場したら30回目より後ろの文字を削除したいんですがどう記述したら良いでしょう。 # \rから次の\r間には任意の文字数の文字列があります # 言語はパールです # # $s =~ s/(((.*?)\r){3})(.*$)//s; # print "$1\n$2\n$3\n$4\n"; # これではだめでした # # # 'キャリッジ・リターンが30回登場したら30回目より後ろの文字を削除したい'(_文字列,_末尾を削除された文字列) :- atom_chars(_文字列,Chars), 'キャリッジ・リターンが30回登場したら30回目より後ろを削除したい'(0,Chars,Chars_2), atom_list_concat(Chars_2,_末尾を削除された文字列). 'キャリッジ・リターンが30回登場したら30回目より後ろを削除したい'(30,L,[]) :- !. 'キャリッジ・リターンが30回登場したら30回目より後ろを削除したい'(_,[],[]) :- !. 'キャリッジ・リターンが30回登場したら30回目より後ろを削除したい'(_n,['\r'|R1],R2) :- _n_2 is _n + 1, 'キャリッジ・リターンが30回登場したら30回目より後ろを削除したい'(_n_2,R1,R2),!. 'キャリッジ・リターンが30回登場したら30回目より後ろを削除したい'(_n,[A|R1],[A|R2]) :- 'キャリッジ・リターンが30回登場したら30回目より後ろを削除したい'(_n,R1,R2),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/786 # # \rが30回登場したら30回目より後ろの文字を削除したいんですがどう記述したら良いでしょう。 # \rから次の\r間には任意の文字数の文字列があります # 言語はパールです # # $s =~ s/(((.*?)\r){3})(.*$)//s; # print "$1\n$2\n$3\n$4\n"; # これではだめでした # # # 'キャリッジ・リターンが30回登場したら30回目より後ろの文字を削除したい'(_文字列,_末尾を削除された文字列) :- sub_atom(_文字列,0,_,_,_末尾を削除された文字列), count(sub_atom(_末尾を削除された文字列,_,1,_,'\r'),30),!. 'キャリッジ・リターンが30回登場したら30回目より後ろの文字を削除したい'(_文字列,_文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/775 # # ●正規表現の使用環境 # PCRE # # ●検索か置換か? # 置換 # # ●説明 # <tag>から</tag>内の文字列abcをABCへ置換したい # # ●対象データ # xabcxxx<tag>abcxxxxxxxxxxxabcxxxxxxxabcxx</tag>xxxxabcxxxabcxx # xabcxxx<tag>abc</tag>xxxxaxxxxxxxabcxxcxxxxx<tag>abcxx</tag>xxx # # ●希望する結果 # xabcxxx<tag>ABCxxxxxxxxxxxABCxxxxxxxABCxx</tag>xxxxabcxxxabcxx # xabcxxx<tag>ABC</tag>xxxxaxxxxxxxabcxxcxxxxx<tag>ABCxx</tag>xxx # # # '<tag>から</tag>内の文字列abcをABCへ置換したい'(_文字列,_タグ,_置換された文字列) :- タグと終了タグ文字ならび(_タグ,_タグ文字ならび,_終了タグ文字ならび), sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), append(L1_1,_タグ文字ならび,L1), append(_終了タグ文字ならび,R3,L3), タグまたは終了タグを含まない(L2,_タグ文字ならび,_終了タグ文字ならび), abcをABCへ置換(S2,S2_2), '<tag>から</tag>内の文字列abcをABCへ置換したい'(S3,_置換された文字列_2), atomic_list_concat([S1,S2_2,_置換された文字列_2],_置換された文字列),!. '<tag>から</tag>内の文字列abcをABCへ置換したい'(_文字列,_文字列). タグと終了タグ文字ならび(_タグ,_タグ文字ならび,_終了タグ文字ならび) :- atom_chars(_タグ,Chars), append([<],Chars,[>],_タグ文字ならび), append([<,/],Chars,[>],_終了タグ文字ならび),!. タグまたは終了タグを含まない(L,L1,L2) :- \+(append(_,L1,_,L)), \+(append(_,L2,_,L)). abcをABCへ置換(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,abc,S3,_,_,_), abcをABCへ置換(S3,_置換された文字列_2), atomic_list_concat([S1,'ABC',_置換された文字列_2],_置換された文字列),!. abcをABCへ置換(_文字列,_文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/775 # # ●正規表現の使用環境 # PCRE # # ●検索か置換か? # 置換 # # ●説明 # <tag>から</tag>内の文字列abcをABCへ置換したい # # ●対象データ # xabcxxx<tag>abcxxxxxxxxxxxabcxxxxxxxabcxx</tag>xxxxabcxxxabcxx # xabcxxx<tag>abc</tag>xxxxaxxxxxxxabcxxcxxxxx<tag>abcxx</tag>xxx # # ●希望する結果 # xabcxxx<tag>ABCxxxxxxxxxxxABCxxxxxxxABCxx</tag>xxxxabcxxxabcxx # xabcxxx<tag>ABC</tag>xxxxaxxxxxxxabcxxcxxxxx<tag>ABCxx</tag>xxx # # # '<tag>から</tag>内の文字列abcをABCへ置換したい'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), append(L1_1,[<,t,a,g,>],L1), L3 = [<,/,t,a,g,>|R3], 'tagまたは/tagを含まない'(L2), abcをABCへ置換(S2,S2_2), '<tag>から</tag>内の文字列abcをABCへ置換したい'(S3,_置換された文字列_2), atomic_list_concat([S1,S2_2,_置換された文字列_2],_置換された文字列),!. '<tag>から</tag>内の文字列abcをABCへ置換したい'(_文字列,_文字列). 'tagまたは/tagを含まない'(L2) :- \+(append(_,[<,t,a,g,>|_],L2)), \+(append(_,[<,/,t,a,g,>|_],L2)). abcをABCへ置換(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,abc,S3,_,_,_), abcをABCへ置換(S3,_置換された文字列_2), atomic_list_concat([S1,'ABC',_置換された文字列_2],_置換された文字列),!. abcをABCへ置換(_文字列,_文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/765 # # 以下の解決方法を教えてください。 # ●正規表現の使用環境 # emacs-lisp # ●検索か置換か? # 検索 # ●説明 # 特定の文字列Aにマッチしないが、文字列BorCにはマッチする文字列を検索したい。 # 初期状態でregexpは↓のようになっており # "-\\(ring\\|history\\)\\'" # 文字列末尾に -ring か -history があればマッチしてしまいます。 # この状態を維持しつつ特定の文字列を含む文字列であればマッチさせたくない状況を作りたいです。 # ●対象データ # hogehoge-kill-ring # hugahuga-history # user-hogehoge-kill-ring # user-hugahuga-history # hogehoge-user-kill-ring # hugahuga-user-history # ●希望する結果 # hogehoge-kill-ring # ^ # hugahuga-history # ^ # だけが難しければ最悪↓も含んでしまってOK # hogehoge-user-kill-ring # ^ # hugahuga-user-history # ^ # 以上よろしくお願いします。 # # # '特定の文字列Aにマッチしないが、文字列BorCにはマッチする検索'(_文字列,_文字列A,_文字列B,_文字列C,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,_,_,_), '文字列Aにマッチしない'(_適合文字列,_文字列A), '文字列BorCにはマッチする'(_適合文字列,_文字列B,_文字列C). '文字列Aにマッチしない'(_文字列,_文字列A) :- \+(_文字列=_文字列A). '文字列BorCにはマッチする'(_文字列,_文字列B,_) :- _文字列 = _文字列B,!. '文字列BorCにはマッチする'(_文字列,_,_文字列C) :- _文字列 = _文字列C. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/765 # # 以下の解決方法を教えてください。 # ●正規表現の使用環境 # emacs-lisp # ●検索か置換か? # 検索 # ●説明 # 特定の文字列Aにマッチしないが、文字列BorCにはマッチする文字列を検索したい。 # 初期状態でregexpは↓のようになっており # "-\\(ring\\|history\\)\\'" # 文字列末尾に -ring か -history があればマッチしてしまいます。 # この状態を維持しつつ特定の文字列を含む文字列であればマッチさせたくない状況を作りたいです。 # ●対象データ # hogehoge-kill-ring # hugahuga-history # user-hogehoge-kill-ring # user-hugahuga-history # hogehoge-user-kill-ring # hugahuga-user-history # ●希望する結果 # hogehoge-kill-ring # ^ # hugahuga-history # ^ # だけが難しければ最悪↓も含んでしまってOK # hogehoge-user-kill-ring # ^ # hugahuga-user-history # ^ # 以上よろしくお願いします。 # # # '特定の文字列Aにマッチしないが、文字列BorCにはマッチする検索'(_文字列,_文字列A,_文字列B,_文字列C,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,_,_,_), '文字列Aにマッチしない'(_適合文字列,_文字列A), '文字列BorCにはマッチする'(_適合文字列,_文字列B,_文字列C). '文字列Aにマッチしない'(_文字列,_文字列A) :- \+(_文字列=_文字列A). '文字列BorCにはマッチする'(_文字列,_文字列B,_) :- _文字列 = _文字列B,!. '文字列BorCにはマッチする'(_文字列,_,_文字列C) :- _文字列 = _文字列C. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/765 # # 以下の解決方法を教えてください。 # ●正規表現の使用環境 # emacs-lisp # ●検索か置換か? # 検索 # ●説明 # 特定の文字列Aにマッチしないが、文字列BorCにはマッチする文字列を検索したい。 # 初期状態でregexpは↓のようになっており # "-\\(ring\\|history\\)\\'" # 文字列末尾に -ring か -history があればマッチしてしまいます。 # この状態を維持しつつ特定の文字列を含む文字列であればマッチさせたくない状況を作りたいです。 # ●対象データ # hogehoge-kill-ring # hugahuga-history # user-hogehoge-kill-ring # user-hugahuga-history # hogehoge-user-kill-ring # hugahuga-user-history # ●希望する結果 # hogehoge-kill-ring # ^ # hugahuga-history # ^ # だけが難しければ最悪↓も含んでしまってOK # hogehoge-user-kill-ring # ^ # hugahuga-user-history # ^ # 以上よろしくお願いします。 # # # '特定の文字列Aにマッチしないが、文字列BorCにはマッチする検索'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,_,_,_), '文字列Aにマッチしない'(_適合文字列), '文字列BorCにはマッチする'(_適合文字列). '文字列Aにマッチしない'(_適合文字列) :- 文字列A(_文字列A), \+(_適合文字列=_文字列A). '文字列BorCにはマッチする'(_文字列B) :- 文字列B(_文字列B). '文字列BorCにはマッチする'(_文字列C) :- 文字列C(_文字列C). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/758 # # ●正規表現の使用環境 # Firefox 3.6.28の*.uc.js # # ●検索か置換か? # 検索?置換? # # ●説明 # ・以前、別のスレでAのURLをBのように、v=以外のパラメータを消すものを書いてもらいました。 #  A: http://ime.nu/www.youtube.com/watch?v=abcdef123456&feature=related&etc=sexample #  B: http://ime.nu/www.youtube.com/watch?v=abcdef123456 # ・正規表現 #  [/^(http:\/\/(\w+\.)?youtube\.com\/watch).*[?&](v=[^&#]+).*/, '$1?$3'] # # 今回は別のURLからパラメータを消したいです。 # # ●対象データ # http://ime.nu/www.forest.impress.co.jp/docs/news/20120418_527251.html?ref=rss # # ●希望する結果 # http://ime.nu/www.forest.impress.co.jp/docs/news/20120418_527251.html # # # ※このようにしてみたのですが、上手くいきませんでした。 # var patterns = [ # //置換したいURLパターンを記述 # [/^(http:\/\/(\w+\.)?youtube\.com\/watch).*[?&](v=[^&#]+).*/, '$1?$3'], # [/^(http:\/\/www\.forest\.impress\.co\.jp\/docs\/news\/)[0-9]_[0-9]\.html\?ref=rss, '$1'] # ]; # # 'URLからパラメータを消したい'(_URL文字列,_パラメータの消されたURL文字列) :- split(_URL文字列,['?'],[_パラメータの消されたURL文字列|_]). % 以下のサイトは # 出典:: http://kohada.2ch.net/test/read.cgi/php/1168450843/821 # # 住所と番地の間にある空白を削除する場合どうやればいいですか? # 「見附市 見附 123番地」この文字列を # 「見附市 見附123番地」としたいです # 「見附市」と「見附」の間の空白はそのままという条件付です # 市(見附市). 住所と番地の間にある空白を削除する(_文字列,_住所と番地の間にある空白を削除された文字列) :- 空白で分割して空白を含む要素ならびを作る(_文字列,_要素ならび), 前の要素が市名でない番地前の空白を削除されたならび(_要素ならび,_前の要素が市名でない番地前の空白を削除されたならび), ならびを結合して住所と番地の間にある空白を削除された文字列を生成(_前の要素が市名でない番地前の空白を削除されたならび,_住所と番地の間にある空白を削除された文字列). 空白で分割して空白を含む要素ならびを作る(_文字列,_要素ならび) :- sPLIT(_文字列,[' '],L). 前の要素が市名でない番地前の空白を削除されたならび(_要素ならび,_前の要素が市名でない番地前の空白を削除されたならび) :- append(L1,[A|R2],[B|R3],L), 前の要素が市名でない番地前の空白を(A,B,R2), 削除されたならび(L1,A,B,R2,_前の要素が市名でない番地前の空白を削除されたならび). 前の要素が市名でない番地前の空白を(A,B,R2) :- \+(市名(A)), all(R2,' '), sub_atom(B,0,1,_,_B0), member(B0,['0','1','2','3','4','5','6','7','8','9']),!. 削除されたならび(L1,A,B,R2,_前の要素が市名でない番地前の空白を削除されたならび) :- append(L1,[A,B|R3],_前の要素が市名でない番地前の空白を削除されたならび). ならびを結合して住所と番地の間にある空白を削除された文字列を生成(_前の要素が市名でない番地前の空白を削除されたならび,_住所と番地の間にある空白を削除された文字列) :- atomic_list_concat(_前の要素が市名でない番地前の空白を削除されたならび,_住所と番地の間にある空白を削除された文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/745 # # ●正規表現の使用環境 # PCREライブラリを使用したアプリケーション # # ●検索か置換か? # 置換 # # ●説明 # HTMLタグ形式で括られたテキストで#が二つ以上有るものを検索 # もし有れば対応する前方タグ内の後ろに@を付けたい # # ●対象データ # <AB><CD>nea##kv</CD>nk#eccu</AB> # nea<YY><EF>###v</EF>orarcmm</YY> # <HA>ne#<YY>#</YY>ec#cv</HA>axxzi # <KK>#<CD>asiaev</CD>un##ima</KK> # # ●希望する結果 # <AB><CD@>nea##kv</CD>nk#eccu</AB> # nea<YY><EF@>###v</EF>orarcmm</YY> # <HA>ne#<YY>#</YY>ec#cv</HA>axxzi # <KK@>#<CD>asiaev</CD>un##ima</KK> # % % ここでは、 % 非決定性の処理を考える。先頭から順に置換が進んでいくように。 % 注意するべきことは、普通に非決定性に書くと、既に置換したつもりの % 部分が変数の束縛が解かれて、置換前の状態にもどってしまうこと。 % この型の述語では常にその点に注意する。 % 'HTMLタグ形式で括られたテキストで#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'(_文字列,_置換された文字列) :- タグとデータに分割する(_文字列,_タグとデータならび), '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'(_タグとデータならび,_置換されたタグとデータならび), atomic_list_concat(_置換されたタグとデータならび,_置換された文字列). タグとデータに分割する(_文字列,[_前データ,_タグ|R]) :- データとタグの切り取り(_文字列,_前データ,_タグ,_残り文字列), タグとデータに分割する(_残り文字列,R),!. タグとデータに分割する(_文字列,[_文字列]). データとタグの切り取り(_文字列,_前データ,_タグ,_残り文字列) :- sub_atom(_文字列,S1,1,_,'<'), sub_atom(_文字列,0,S1,_,_前データ), sub_atom(_文字列,S2,1,_,'>'), Len is S2 - S1 + 1, sub_atom(_文字列,S1,Len,R,_タグ), sub_atom(_文字列,S2_2,R,0,_残り文字列),!. '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'(L1,L2) :- append(L0,[A,B|R],L1). タグである(A), '#が二つ以上ある'(B), sub_atom(A,_,_,2,A_1), atomic_list_concat([A_1,'@>',B],C), append(L0,[C,B|R1],L2), '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'(L0,A,B,C,R,L2). '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'([A|R1],[A|R2]) :- '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'(R1,R2). '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'([],[]). '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'(L0,A,B,C,R1,L2). append(L0,[C|R1],L2). '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'(L0,A,B,C,R1,L2) :- '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'(R1,L2_1), append(L0,[C,B|L2_1],L2). タグである(A) :- sub_atom(A,0,1,_,<), sub_atom(A,_,1,0,>). '#が二つ以上ある'(B) :- count(sub_atom(B,_,1,_,'#'),Count), Count >= 2. % % count/2 % % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/745 # # ●正規表現の使用環境 # PCREライブラリを使用したアプリケーション # # ●検索か置換か? # 置換 # # ●説明 # HTMLタグ形式で括られたテキストで#が二つ以上有るものを検索 # もし有れば対応する前方タグ内の後ろに@を付けたい # # ●対象データ # <AB><CD>nea##kv</CD>nk#eccu</AB> # nea<YY><EF>###v</EF>orarcmm</YY> # <HA>ne#<YY>#</YY>ec#cv</HA>axxzi # <KK>#<CD>asiaev</CD>un##ima</KK> # # ●希望する結果 # <AB><CD@>nea##kv</CD>nk#eccu</AB> # nea<YY><EF@>###v</EF>orarcmm</YY> # <HA>ne#<YY>#</YY>ec#cv</HA>axxzi # <KK@>#<CD>asiaev</CD>un##ima</KK> # # # 'HTMLタグ形式で括られたテキストで#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'(_文字列,_置換された文字列) :- タグとデータに分割する(_文字列,_タグとデータならび), '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'(_タグとデータならび,_置換されたタグとデータならび), atomic_list_concat(_置換されたタグとデータならび,_置換された文字列). タグとデータに分割する(_文字列,[_前データ,_タグ|R]) :- データとタグの切り取り(_文字列,_前データ,_タグ,_残り文字列), タグとデータに分割する(_残り文字列,R),!. タグとデータに分割する(_文字列,[_文字列]). データとタグの切り取り(_文字列,_前データ,_タグ,_残り文字列) :- sub_atom(_文字列,S1,1,_,'<'), sub_atom(_文字列,0,S1,_,_前データ), sub_atom(_文字列,S2,1,_,'>'), Len is S2 - S1 + 1, sub_atom(_文字列,S1,Len,R,_タグ), sub_atom(_文字列,S2_2,R,0,_残り文字列),!. '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'([],[]) :- !. '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'([A,B|R1],[A,C|R2]) :- タグである(A), '#が二つ以上ある'(B), sub_atom(A,_,_,2,A_1), atomic_list_concat([A_1,'@>'],C), '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'(R1,R2),!. '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'([A|R1],[A|R2]) :- '#が二つ以上有るものを検索もし有れば対応する前方タグ内の後ろに@を付けたい'(R1,R2). タグである(A) :- sub_atom(A,0,1,_,<), sub_atom(A,_,1,0,>). '#が二つ以上ある'(B) :- count(sub_atom(B,_,1,_,'#'),Count), Count >= 2. % % count/2 % % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/741 # # ●正規表現の使用環境 # PCREライブラリを使用したアプリケーション # # ●検索か置換か? # 置換 # # ●説明 # 括弧内に特定の文字列が有れば対応する括弧を装飾したい # # (例ではCCCを含むものを検索し対応する括弧に*を加える) # # ●対象データ # (AACCCDDAABBB) # (AACAABBDBABC) # CDAA(DB(CC)C)(CDD) # C(AA(ABBD)(BCCC)C) # # ●希望する結果 # (*AACCCDDAABBB*) # (AACAABBDBABC) # CDAA(DB(CC)C)(CDD) # C(AA(ABBD)(*BCCC*)C) # # '括弧内に特定の文字列が有れば対応する括弧を装飾したい'(_文字列,_特定文字列,_置換された文字列) :- sPLIT(_文字列,['(',')',' '],L), findall(_置換された要素,( append(L0,[A|R],L), 要素文字列置換(A,_特定文字列,_置換された要素)), L), atomic_list_concat(L,_置換された文字列). 要素文字列置換(A,_特定文字列,_置換された要素) :- sub_atom(A,_,_,_,_特定文字列), atomic_list_concat(['*',A,'*'],_置換された要素),!. 要素文字列置換(A,_,A). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/729 # # 超初心者質問で申し訳ないのですが、 # # javascriptで、 # ABC|DEF|GHI|JKL 等を検索した時に一致した文字列全てを得る方法はありますか? # 更にできればABCとGHIがマッチした場合に、0,2の値が取れれば嬉しいです。 # # 'ABC|DEF|GHI|JKL 等を検索した時に一致した文字列全てを得る方法はありますか? 更にできればABCとGHIがマッチした場合に、0,2の値が取れれば嬉しいです。'(_文字列,_前文字列,_適合文字列,_後文字列,_値) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), 検索した時に一致(_値,_適合文字列). 検索した時に一致(0,'ABC'). 検索した時に一致(1,'DEF'). 検索した時に一致(2,'GHI'). 検索した時に一致(3,'JKL'). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/695 # # Objective-CのNSRegularExpressionで、 # 行頭の半角スペース列を置換しようとして@"^ +"と書いたのですが、文字列の最初しか行頭と認識してくれないらしく、 # 複数行にまたがる文字列の各行頭のスペースが置換できないので、改行文字に続く次のスペースも検出しようとして # @"^ +|\\n +" # と書くと、改行文字も含めて置換してしまうため、マッチ部分をキャプチャする()を使って # @"^( +)|\\n( +)" # としたのですが、 # (2147483647,0)という文字列の外の範囲がマッチされてしまい、置換しようとしてエラーとなってしまいます。 # 文字列途中も含めて、行頭の半角スペース列のみを置換するためにはどのようなパターンを使うのが適切でしょうか? # # '文字列途中も含めて、行頭の半角スペース列のみを置換する'(_改行を含む文字列,_置換文字列,_置換された改行を含む文字列) :- 行頭の半角スペース列のならび(_改行を含む文字列,_前文字列,_行頭の空白ならび,_後文字列), '文字列途中も含めて、行頭の半角スペース列のみを置換する'(_後文字列,_置換文字列,_置換された改行を含む文字列_2), concat_atom([前文字列,'\n',_置換文字列,_置換された改行を含む文字列_2],_置換された改行を含む文字列),!. '文字列途中も含めて、行頭の半角スペース列のみを置換する'(_文字列,_,_文字列). 行頭の半角スペース列のならび(_改行を含む文字列,_前文字列,_行頭の空白ならび,_後文字列) :- sub_atom(_改行を含む文字列,_,_,_,_前文字列,S2,_後文字列,L1,['\n'|R2],L3), \+(R2=[]), all(R2,' '), \+((L3=[A|R3],A=' ')). % sub_atom/10 % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/689 # # <que name="" mail="" vpos="-45400">/publish lv80605616_t2B_SHD_7@s35841 /content/20120319/lv80605616_214226439000_1_8370f8.f4v</que> # この文字列から # # /content/20120319/lv80605616_214226439000_1_8370f8.f4v # # # 数字とかは毎回変わるんだけど # # '<que name="" mail="" vpos="-45400">/publish lv80605616_t2B_SHD_7@s35841 /content/20120319/lv80605616_214226439000_1_8370f8.f4v</que>の部分を抜き出すにはどうすればいい?数字とかは毎回変わるんだけど'(_文字列,_前文字列,_適合文字列,_後文字列) :- sPLIT(_文字列,[' ',''],L), append(L1,[' ',_適合文字列,''|R],L), concat_atom(L1,S1), concat_atom([S1,' '],_前文字列), concat_atom(['% 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/671 # # sedです # # foo # bar # *piyo # *hoge # *zieg # kero # piyo # のような文章があるとして、先頭にアスタリスクがついている部分を別記号で囲みたいです。 # foo # bar # [ # *piyo # *hoge # *zieg # ] # kero # piyo # # sedのスクリプトファイルで書いているのですが複数行にまたがるマッチングをこなしてくれません # どうか御教示願います。 # # '先頭にアスタリスクがついている部分を別記号で囲みたい'(_文字列,_置換された文字列) :- 'リスト要素の先頭にアスタリスクがついている部分を別記号で囲みたい'(L,L5). append(L5,['\n'],L6), concat_atom(L5,'\n',_置換された文字列_0), concat_atom([_置換された文字列_0,'\n'],_置換された文字列),!. '先頭にアスタリスクがついている部分を別記号で囲みたい'(_文字列,_文字列). 'リスト要素の先頭にアスタリスクがついている部分を別記号で囲みたい'(L,X) :- append(L1,L2,L3,L), '先頭にアスタリスクがついている部分'(L1,L2,L3), 'リスト要素の先頭にアスタリスクがついている部分を別記号で囲みたい'(L3,L4), append(L1,['[\n'|L2],[']\n'|L4],X),!. 'リスト要素の先頭にアスタリスクがついている部分を別記号で囲みたい'(L,L). '先頭にアスタリスクがついている部分'(L1,L2,L3) :- \+((last(L1,A),sub_atom(A,0,1,_,'*'))), \+((L3 = [B|_],sub_atom(B,0,1,_,'*'))), '全ての要素の先頭文字が*'(L2). '全ての要素の先頭文字が*'([]). '全ての要素の先頭文字が*'([A|R]) :- sub_atom(A,0,1,_,'*'), '全ての要素の先頭文字が*'(R). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/671 # # sedです # # foo # bar # *piyo # *hoge # *zieg # kero # piyo # のような文章があるとして、先頭にアスタリスクがついている部分を別記号で囲みたいです。 # foo # bar # [ # *piyo # *hoge # *zieg # ] # kero # piyo # # sedのスクリプトファイルで書いているのですが複数行にまたがるマッチングをこなしてくれません # どうか御教示願います。 # # '先頭にアスタリスクがついている部分を別記号で囲みたい'(_文字列,_置換された文字列) :- sPLIT(_文字列,['\n'],L), '先頭にアスタリスクがついている部分を別記号で囲みたい'(L,L2), concat_atom(L2,_置換された文字列). '先頭にアスタリスクがついている部分を別記号で囲みたい'([],[]). '先頭にアスタリスクがついている部分を別記号で囲みたい'(['\n'],['\n']) :- !. '先頭にアスタリスクがついている部分を別記号で囲みたい'(['\n',A|R1],['[','\n',A|R2]) :- sub_atom(A,0,1,_,'*'), '先頭にアスタリスクがついている部分'(R1,R2),!. '先頭にアスタリスクがついている部分を別記号で囲みたい'(['\n',A|R1],['\n',A|R2]) :- '先頭にアスタリスクがついている部分を別記号で囲みたい'(R1,R2). '先頭にアスタリスクがついている部分'([],[']','\n']). '先頭にアスタリスクがついている部分'(['\n'],[']','\n']) :- !. '先頭にアスタリスクがついている部分'(['\n',A|R1],['\n',A|R2]) :- sub_atom(A,0,1,_,'*'), '先頭にアスタリスクがついている部分'(R1,R2),!. '先頭にアスタリスクがついている部分'(['\n',A|R1],['\n',']','\n',A|R2]) :- '先頭にアスタリスクがついている部分を別記号で囲みたい'(R1,R2),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/671 # # sedです # # foo # bar # *piyo # *hoge # *zieg # kero # piyo # のような文章があるとして、先頭にアスタリスクがついている部分を別記号で囲みたいです。 # foo # bar # [ # *piyo # *hoge # *zieg # ] # kero # piyo # # sedのスクリプトファイルで書いているのですが複数行にまたがるマッチングをこなしてくれません # どうか御教示願います。 # # '先頭にアスタリスクがついている部分を別記号で囲みたい'(_文字列,_置換された文字列) :- sPLIT(_文字列,['\n'],L), '先頭にアスタリスクがついている部分を別記号で囲みたい'(L,L2), concat_atom(L2,_置換された文字列). '先頭にアスタリスクがついている部分を別記号で囲みたい'([],[]). '先頭にアスタリスクがついている部分を別記号で囲みたい'(['\n'],['\n']) :- !. '先頭にアスタリスクがついている部分を別記号で囲みたい'(['\n',A|R1],L) :- sub_atom(A,0,1,_,'*'), '先頭にアスタリスクがついている部分'(['\n',A|R1],L1,R1_1), '先頭にアスタリスクがついている部分を別記号で囲みたい'(R1_1,R2), append(L1,R2,L),!. '先頭にアスタリスクがついている部分を別記号で囲みたい'(['\n',A|R1],['\n',A|R2]) :- '先頭にアスタリスクがついている部分を別記号で囲みたい'(R1,R2). '先頭にアスタリスクがついている部分'(['\n',A|R1],['\n',A|R2],R) :- sub_atom(A,0,1,_,'*'), '先頭にアスタリスクがついている部分'(R1,R2,R),!. '先頭にアスタリスクがついている部分'(L,['\n',']'],L). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/668 # # 秀丸エディタのgrep(HMJRE.DLL V1.79)で # "hoge"という単語を検索するときに # '.'に続くもの以外を全て検索したいときの書き方を教えてください。 # # " hoge" ",hoge" 等は検索したいけど # ".hoge"は検索したくありません # # # '.に続くもの以外を全て検索したい'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,_,_,_), \+((sub_atom(_前文字列,_,1,0,'.'))). % 以下のサイトは # # /(a|b)\1{5}/ で 「aaaaaa」と「bbbbbb」にはマッチするけど # 「ababab」とか「aabbaa」にはマッチしない。 # 正規表現ってこういう書き方できるんだ・・・。 # 後方参照を同じ正規表現の中で使えるというか、そんな感じ。 文字候補(a). 文字候補(b). 決まった文字数の同一文字ならび(_文字列,_文字数,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), length(L2,_文字数), all(L1,A), 文字候補(A). all([],_). all([A|R],A) :- all(R,A). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/646 # # 質問です # # phpのpreg_replaceで文字列を入れ替えたいのですが # # <a href="mailto:example@example.com">問い合せ</a> # # のexample@example.comのみを入れ替えるにはどのような正規表現を使えば出来るでしょうか? # # よろしくお願いします # 'example@example.comのみを入れ替える'(_文字列,_入れ替える文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), メールアドレス部分(S2,L2), 'example@example.comのみを入れ替える'(S3,_入れ替える文字列,_置換されたS3), concat_atom([S1,'"mailto:',_入れ替える文字列,'"',_置換されたS3],_置換された文字列),!. 'example@example.comのみを入れ替える'(_文字列,_,_文字列). メールアドレス部分(S2,L2) :- L2 = ['"',m,a,i,l,t,o,:|R2], append(L2_1,['"'],R2), \+(member('"',L2_1)), atom_chars(S2_2,R2), メールアドレスとして可能な文字文字列(S2_2),!. メールアドレスとして可能な文字列(_文字列) :- split(_文字列,['@'],[A,B]), メールに使用できるアルファベット(A), メールに使用できるアルファベット(B). メールに使用できるアルファベット(_文字) :- char_code(_文字,_文字コード), メールに使用できる文字コード(_文字コード),!. メールに使用できるアルファベット(_文字) :- member(_文字,['_','-','~']). メールに使用できる文字コード(_文字コード) :- _文字コード >= 65, _文字コード =< 90,!. メールに使用できる文字コード(_文字コード) :- _文字コード >= 97, _文字コード =< 122,!. メールに使用できる文字コード(_文字コード) :- _文字コード >= 48, _文字コード =< 57,!. % 以下のサイトは ?- 'a##'. # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/606 # # 問い合せフォームから来たメールアドレスを正規表現を用いて抽出したいのですが # 秀丸メールを使っておりメール全文をテキスト化したものの中に以下の文章が含まれています # # ▼メールアドレス # aaaaaaaaaa@aaaaaaaaa.com # # ▼メールアドレスという文字列の下にある行だけを検索することは可能でしょうか? # # メールアドレスにマッチする正規表現を使用するとヘッダー内のよくわからないアドレスまで抽出されてしまい # とても面倒くさいのでどうにか文章の下にある行のみを抽出という手段を取りたいのです # # どうか解決策をご教授ください # '▼メールアドレスという文字列の下にある行だけを検索する'(_文字列,_前文字列,_下にある行,_後文字列,_メールアドレスならび) :- sPLIT(_文字列,['\n'],L), '▼メールアドレスという文字列の下にある行'(L,_前文字列,_下にある行,_後文字列), メールアドレスを検索(_下にある行,_メールアドレスならび). '▼メールアドレスという文字列の下にある行'(L,_前文字列,_下にある行,_後文字列) :- append(L0,[A,'\n',_下にある行,'\n'|R],L), sub_atom(A,_,8,_,'▼メールアドレス'), concat_atom(L0,S1), concat_atom([S1,A,'\n'],_前文字列), concat_atom(R,_後文字列). メールアドレスを検索(_行,_メールアドレスならび) :- findall(S2,( sub_atom(_行,_,_,_,S1,S2,S3,L1,L2,L3), メールアドレス形式(S2), 前後がアルファベットでない(S1,S3)), _メールアドレスならび). メールアドレス形式(S) :- split(S2,['@'],[U1,U2]), アルファベット(A), アルファベット(B). 前後がアルファベットでない(S1,S3) :- \+((last(S1,A),アルファベット(A))), \+((sub_atom(S3,0,1,_,B),アルファベット(B))). アルファベット('-') :- !. アルファベット('_') :- !. アルファベット('~') :- !. アルファベット(A) :- A @>= '0', A @=< '9',!. アルファベット(A) :- A @>= 'A', A @=< 'Z',!. アルファベット(A) :- A @>= 'a', A @=< 'z',!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/595 # # ●正規表現の使用環境 # C# # # ●検索か置換か? # 置換 # # ●説明 # りんご=20 以外を削除したい # # ●対象データ # みかん10 りんご20 バナナ30 # いちご40 めろん20 りんご20 # # ●希望する結果 # りんご20 # りんご20 # # よろしくお願いします # # 検索文字列(りんご20). 'りんご=20 以外を削除したい'(_文字列,_部分削除された文字列) :- findall(_検索文字列,( 検索文字列(_検索文字列)), _検索文字列ならび), 検索文字列と改行だけを切り出す(_文字列,_検索文字列ならび,L1), ならびを整形する(L1,L2), concat_atom(L2,_部分削除された文字列). 検索文字列と改行だけを切り出す(_文字列,_検索文字列ならび,L) :- sPLIT(_文字列,['\n'|_検索文字列ならび],L1), findall(_検索文字列,( member(_検索文字列,L1), member(_検索文字列,_検索文字列ならび)), L). ならびを整形する([],[]). ならびを整形する([A],[A]) :- \+(A = '\n'),!. ならびを整形する(['\n'|R1],R2) :- ならびを整形する(R1,R2),!. ならびを整形する([A,'\n'|R1],[A,'\n'|R2]) :- ならびを整形する(R1,R2),!. ならびを整形する([A,B|R1],[A,' '|R2]) :- ならびを整形する([B|R1],R2). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/595 # # ●正規表現の使用環境 # C# # # ●検索か置換か? # 置換 # # ●説明 # りんご=20 以外を削除したい # # ●対象データ # みかん10 りんご20 バナナ30 # いちご40 めろん20 りんご20 # # ●希望する結果 # りんご20 # りんご20 # # よろしくお願いします # # 'りんご=20 以外を削除したい'(_文字列,_部分削除された文字列) :- sPLIT(_文字列,[' ','\n'],L), findall(A,( member(A,L), 置換(A)), L1), 部分削除文字列に変換(L1,_部分削除された文字列). 置換('りんご20'). 置換('\n'). 部分削除文字列に変換(L1,_部分削除された文字列) :- ならびを整形する(L1,L2), concat_atom(L2,_部分削除された文字列). ならびを整形する([],[]). ならびを整形する([A],[A]) :- \+(A = '\n'),!. ならびを整形する(['\n'|R1],R2) :- ならびを整形する(R1,R2),!. ならびを整形する([A,'\n'|R1],[A,'\n'|R2]) :- ならびを整形する(R1,R2),!. ならびを整形する([A,B|R1],[A,' '|R2]) :- ならびを整形する([B|R1],R2). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/563 # # ●正規表現の使用環境 # PHP5.3 # # ●検索か置換か? # 置換 # # ●説明 # ページ内にある<h2>〜<h6>に対して内側に<span>を入れたいです。 # hタグににclassがある場合なども想定されますがそれは引き継ぎたいです。 # 何卒ご教授お願いいたします。 # # ●対象データ # <h2>あああああ</h2> # <h2 class="hoge">あああああ</h2> # <h2><span>あああああ</span></h2> # 以下h6まで同様 # <h6>あああああ</h6> # <h6 class="hoge">あああああ</h6> # <h6><span>あああああ</span></h6> # # ●希望する結果 # <h2><span>あああああ</span></h2> # <h2 class="hoge"><span>あああああ</span></h2> # <h2><span>あああああ</span></h2> # 以下h6まで同様 # <h6><span>あああああ</span></h6> # <h6 class="hoge"><span>あああああ</span></h6> # <h6><span>あああああ</span></h6> # # 'ページ内にある<h2>〜<h6>に対して内側に<span>を入れたい'(_文字列,_置換された文字列) :- 'Hタグを見つけて、情報を分離する'(_文字列,_前文字列,_前タグ,_中間情報,_後タグ,_後文字列), 'spanタグを付加'(_中間情報,_spanタグに挟まれた中間情報), 'ページ内にある<h2>〜<h6>に対して内側に<span>を入れたい'(_後文字列,_置換された文字列_2), concat_atom([_前文字列,_前タグ,_spanタグに挟まれた中間情報,_後タグ,_置換された文字列_2],_置換された文字列),!. 'ページ内にある<h2>〜<h6>に対して内側に<span>を入れたい'(_文字列,_文字列). 'Hタグを見つけて、情報を分離する'(_文字列,_前文字列,_前タグ,_中間情報,_後タグ,_後文字列) :- 前タグ(_文字列,_前文字列,_前タグ,A,_残り文字列), '中間情報・後タグ・後文字列'(_残り文字列,A,_中間情報,_後タグ,_後文字列),!. 前タグ(_文字列,_前文字列,_前タグ,A,_残り文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_前タグ,_残り文字列,L1,['<',h,A|R1],L3), 選択できる数字(A), append(L1_1,['>'],R1), \+(member('>',L1_1)),!. '中間情報・後タグ・後文字列'(_文字列,A,_中間情報,_後タグ,_後文字列) :- concat_atom(['<','/',h,A,'>'],_後タグ), sub_atom(_文字列,St,_,_,_中間情報,_後タグ,_後文字列,L1,L2,L3),!. 選択できる数字(A) :- member(A,['2','3','4','5','6']). 'spanタグの付加'(_中間情報,_spanタグに挟まれた中間情報) :- concat_atom(['',_中間情報,''],_spanタグに挟まれた中間情報). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/502 # # 正規表現で足し算はできないでしょうか? # # PHPのソースなんですが # array( 'start' => 10.000, 'end' => 10.166 ), # array( 'start' => 11.166, 'end' => 11.414 ), # array( 'start' => 12.414, 'end' => 14.559 ), # などと並んでる部分があり、これらの数値全部に1を足したいのですが # # 'これらの数値全部に1を足したい'([],[]). 'これらの数値全部に1を足したい'([_行|R1],[_変更された行|R2]) :- 数値に1を加える(_行,_変更された行), 'これらの数値全部に1を足したい'(R1,R2). 数値に1を加える(_行,_変更された行) :- sub_atom(_行,_,_,_,S1_1,S2_1,S3_1,L1_1,L2_1,L3_1), 数値に1を加える(S1_1,S2_1,S3_1,L1_1,L2_1,L3_1,_変更部分,S3_1), 数値に1を加える(S3_1,_残りの変更部分), concat_atom([_変更部分,_残りの変更部分],_変更された行),!. 数値に1を加える(_行,_行). 数値に1を加える(S1_1,S2_1,S3_1,L1_1,L2_1,L3_1,_変更された部分,S3_1) :- 数値部分を取り出す(L1_1,L2_1,L3_1), 数値に1を加えた文字列(L2_1,_数値文字列), concat_([S1_1,_数値文字列],_変更された部分). 数値部分を取り出す(L1_1,L2_1,L3_1) :- 数値に還元できるならび(L2_1), \+((last(L1_1,A),数値(A))), \+((L3_1 = [B|_],数値(B))). 数値に1を加えた文字列(L2_1,_数値文字列) :- number_chars(_数値,L2_1), _数値_2 is _数値 + 1.0, number_chars(_数値_2,L2_2), atom_chars(_数値文字列,L2_2). 数値に還元できるならび([A|R]) :- 数字(A), last([A|R],B), \+(B='.'), 全てが数字かピリオド(R). 全てが数字かピリオド([]). 全てが数字かピリオド([A|R]) :- member(A,['.','0','1','2','3','4','5','6','7','8','9']), 全てが数字かピリオド(R). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/458 # # ●正規表現の使用環境 # wxWidets (wxRegEx) # # ●検索か置換か? # 検索 # # ●説明 # 一行の中に丸括弧で閉じられた文字列を検索したい。 # 丸括弧が出てくる位置や数は不定です # # ●対象データ # (2012年2月)北海道で撮影。(raw)で保存。猫と一緒(雄) # # ●希望する結果 # (2012年2月) (raw) (雄) # # (\\(.*?\\))で検索すると、"(2012年2月)"だけ検索されます。 # (\\(.*?\\))(?:.*)(\\(.*?\\))(?:.*)(\\(.*?\\))で検索すると(2012年2月)(raw)(雄)が検索されます。 # ただ括弧の位置が変わった場合には、この正規表現では検索にかからなくなります。 # # サクラテキストエディタ等の正規表現で検索すると、(\\(.*?\\)) 文章内にいくつ括弧文字列があっても # すべて検索されています。 # # 正規表現でどのように書けばいいのか、それとも、プログラム上で検索しているのかわかりません。 # どのように実現しているかまったくわかりません。 # # 考え方などをおしえてくださいませ。 # # '一行の中に丸括弧で閉じられた文字列を検索したい。丸括弧が出てくる位置や数は不定です'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), 丸括弧に挟まれた文字列(L2,_適合文字列), concat_atom([S1,'('],_前文字列), concat_atom([')',S3],_後文字列). 丸括弧に挟まれた文字列(L2,_適合文字列) :- append(['('],L2_1,[')'],L2), \+(member('(',L2_1)), \+(member(')',L2_1)), atom_chars(_適合文字列,L2_1). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/461 # # ●正規表現の使用環境 # linux 2.6系 grep / Scientific Linux 6.1 # # ●検索か置換か? # 検索 # # ●説明 # IPアドレス(xxx.xxx.xxx.xxx IPv4)にヒットさせたい # # ●対象データ # 192.168.0.1 # 255.255.255.0 # 999.999.999.999(注:IPアドレスとして許容されていない) # # ●試した正規表現 # "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" # # 今回の検索では目視で判別できましたが、 # 999.999.999.999←これにヒットしてしまう等、致命的な部分があります。 # # ご教示いただければ幸いです。 # # # 'IPアドレス(xxx.xxx.xxx.xxx IPv4)にヒットさせたい'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), 数字とピリオドのみ(L2), \+((last(L1,A),数字(A))), \+((L3=[B|_],数字(B))), split(_適合文字列,['.'],[N1,N2,N3]), 'IPアドレス範囲'([N1,N2,N3]). 数字とピリオドのみ([]). 数字とピリオドのみ([A|R]) :- member(A,['.','0','1','2','3','4','5','6','7','8','9']), 数字とピリオドのみ(R). 'IPアドレス範囲'([]). 'IPアドレス範囲'([N|R]) :- N >= 0, N =< 255, 'IPアドレス範囲'(R). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/368 # # お願いします # # ●正規表現の使用環境 # PHP5 # # ●検索か置換か? # 置換 # # ●説明 # 0123456789アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンABCDEFGHIJKLMNOPQRSTUVWXYZ゙ ゚\「」,.()-/ # # preg_replace関数を使い上記文字以外を全て削除したい # # ●対象データ # 0ガ9ギAグアaイbウcエdオ # # ●希望する結果 # 09Aアイウエオ # '0123456789アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンABCDEFGHIJKLMNOPQRSTUVWXYZ゙ ゚\\「」,.()-/ preg_replace関数を使い上記文字以外を全て削除したい'(_文字列,_置換された文字列) :- atom_chars('0123456789アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲンABCDEFGHIJKLMNOPQRSTUVWXYZ゙ ゚\\「」,.()-/',_削除しない文字ならび), findall(_文字,( sub_atom(_文字列,_,1,_,_文字), member(_文字,_削除しない文字ならび)), _選択された文字ならび), concat_atom(_選択された文字ならび,_置換された文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/300 # # テキストファイルの中に # foo=bar # という形式で設定値が列挙されています。 # grepかegrepだけでfoo=の右辺値のbarを抽出する正規表現はどうなるでしょうか? # (?<=foo=).* # とかやりたいんですけどgrepもegrepもこの式を受け付けてくれません。 # # 'テキストファイルの中に foo=bar という形式で設定値が列挙されています。foo= の右辺値のbarを抽出する'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列_1,_適合文字列_1,_後文字列_1,L1,[f,o,o,=|R2],L3), \+((last(L1,A),区切り文字(A))), \+((L2 = [B|_],区切り文字(B))), 'テキストファイルの中に foo=bar という形式で設定値が列挙されています。foo= の右辺値のbarを抽出する'(_文字列,_前文字列_1,_適合文字列_1,_後文字列_1,_前文字列,_適合文字列,_後文字列). 'テキストファイルの中に foo=bar という形式で設定値が列挙されています。foo= の右辺値のbarを抽出する'(_文字列,_前文字列,_適合文字列,_後文字列,_前文字列,_適合文字列,_後文字列). 'テキストファイルの中に foo=bar という形式で設定値が列挙されています。foo= の右辺値のbarを抽出する'(_文字列,_前文字列_1,_適合文字列_1,_後文字列_1,_前文字列,_適合文字列,_後文字列) :- 'テキストファイルの中に foo=bar という形式で設定値が列挙されています。foo= の右辺値のbarを抽出する'(_後文字列_1,_前文字列_2,_適合文字列,_後文字列), concat_atom([_前文字列_1,_適合文字列_1,_前文字列_2],_前文字列). 区切り文字(A) :- 数字(A),!, fail. 区切り文字(A) :- アルファベット(A),!, fail. 区切り文字(A) :- 全角文字(A),!, fail. 区切り文字(_). 数字(A) :- char_code(A,Code), Code >= 48, Code =< 57,!. アルファベット(A) :- char_code(A,Code), Code >= 65, Code =< 90,!. アルファベット(A) :- char_code(A,Code), Code >= 97, Code =< 122,!. 全角文字(A) :- char_code(A,Code), Code > 255,!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/239 # # 質問させてください。 # 半角文字列にスペースが含まれています。 # # 例 # 727 751 798 625 791 460 645 850 656 697....... # このスペースをカウントして,3つめのスペースだけを改行に置換する場合(下) # 727 751 798 # 625 791 460 # 645 850 656 # 697....... # # どう表現すればいいのでしょうか? # # 数値が全て3桁ならば分かるのですが,2桁や4桁が含まれており文字数ではマッチできません。 # よろしくお願いします # 'スペースをカウントして,3つめのスペースだけを改行に置換する'(_文字列,_置換された文字列) :- atom_chars(_文字列,Chars1), 'スペースをカウントして,3つめのスペースだけを改行に置換する'(0,Char,Char1), concat_atom(_置換された文字列,Char2). 'スペースをカウントして,3つめのスペースだけを改行に置換する'(_,[],[]) :- !. 'スペースをカウントして,3つめのスペースだけを改行に置換する'(2,[' '|R1],['\n'|R2]) :- 'スペースをカウントして,3つめのスペースだけを改行に置換する'(0,R1,R2). 'スペースをカウントして,3つめのスペースだけを改行に置換する'(N,[' '|R1],[' '|R2]) :- N2 is N + 1, 'スペースをカウントして,3つめのスペースだけを改行に置換する'(N2,R1,R2). 'スペースをカウントして,3つめのスペースだけを改行に置換する'(N,[A|R1],[A|R2]) :- \+(A=' '), 'スペースをカウントして,3つめのスペースだけを改行に置換する'(N,R1,R2). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/229 # # 2時間ほど悩みましたが、解決方法が見つからないので教えて下さい。 # 検索条件 ★で始まり、間に「あ」を挟み、★でおわる # ★と「あ」の間にはx文字(0〜10文字)ランダムに挟まっている # 例文 # ★123あ133s★124か1256★863あ13qw3s★1rtyさ12fd★あ1s★ # 抜き出したい箇所 # ★123あ133s★ # ★863あ13qw3s★ # ★あ1s★ # どなたか頭のいいかた解決方法教えて下さい。 # # '★で始まり、間に「あ」を挟み、★でおわる。★と「あ」の間にはx文字(0〜10文字)ランダムに挟まっている '(_文字列,_前文字列,_適合文字列,_後文字列) :- '★で始まり、間に「あ」を挟み、★でおわる。'(_文字列,_前文字列,_適合文字列,L0,R2_2), '★と「あ」の間にはx文字(0〜10文字)ランダムに挟まっている'(L0,R2_2). '★で始まり、間に「あ」を挟み、★でおわる。'(_文字列,_前文字列,_適合文字列,L0,R2_2) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,[★|R2],L3), append(R2_1,[★],R2), append(L0,[あ|R2_2],R2_1), 間に挟んではいけない(R2_1,L0,R2_2). 間に挟んではいけない(R2_1,L0,R2_2) :- \+(member(★,R2_1)), \+(member(あ,L0)), \+(member(あ,R2_2)). '★と「あ」の間にはx文字(0〜10文字)ランダムに挟まっている'(L0,R2_2) :- length(L0,Len1), length(R2_2,Len2), Len1 =< 10, len2 =< 10. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/224 # # 全角文字(2バイト文字?)だけを検索するには # なんと書くんでしょうか? # # '全角文字(2バイト文字?)だけを検索する'(_文字列,_前文字列,_適合文字,_後文字列) :- sub_atom(_文字列,_,1,_,前文字列,_適合文字列,_後文字列,_,_,_), char_code(_適合文字列,_文字コード), _文字コード > 255. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/197 # # ●正規表現の使用環境 # 秀丸エディタ # ●検索か置換か? # 置換 # ●説明 # <div class="main">の場合に限り、両端のdivをspanに置換したい。 # ※<div class="main">から</div>までの行数は、3行だったり5行だったりと色々変わります。 # ●対象データ # <div class="main">あああああ<br> # いいいいい<br> # ううううう<br> # えええええ<br> # おおおおお<br> # </div> # # ●希望する結果 # <span class="main">あああああ<br> # いいいいい<br> # ううううう<br> # えええええ<br> # おおおおお<br> # </span> # # # 下の正規表現を作ってみたのですが検索でマッチしません。 # どなたか助言頂けるとうれしいです。 # よろしくお願いいたします。 # # 置換元 # <div class="main">(.*\n*)</div> # 置換先 # <span class="main">\1</span> # 'div class="main" タグが現れたら端のdiv,/divをspan,/spanに置換する'(_文字列,_置換された文字列) :- mainからspanへの置換(_文字列,_前文字列,_置換されたdiv部,_後文字列,_置換された文字列), 'div class="main" タグが現れたら端のdiv,/divをspan,/spanに置換する'(_文字列,_前文字列,_置換されたdiv部,_後文字列,_置換された文字列). 'div class="main" タグが現れたら端のdiv,/divをspan,/spanに置換する'(_文字列,_文字列). 'div class="main" タグが現れたら端のdiv,/divをspan,/spanに置換数'(_文字列,_前文字列,_置換されたdiv部,_後文字列,_置換された文字列) :- concat_atom([_前文字列,_置換されたdiv部,_後文字列],_置換された文字列). 'div class="main" タグが現れたら端のdiv,/divをspan,/spanに置換数'(_文字列,_前文字列,_置換されたdiv部,_後文字列,_置換された文字列) :- 'div class="main" タグが現れたら端のdiv,/divをspan,/spanに置換する'(_後文字列,_置換された後文字列), concat_atom([_前文字列,_置換されたdiv部,_置換された後文字列],_置換された文字列). mainからspanへの置換(_文字列,_前文字列,_置換された文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,[<,d,i,v,' ',c,l,a,s,s,=,'"',m,a,i,n,'"',>|R2],L3), append(L2_2,[<,/,d,i,v,>],R2), append([<,s,p,a,n,' ',c,l,a,s,s,=,'"',m,a,i,n,'"',>|L2_2],[<,/,s,p,a,n,>],L2_3), concat_atom(L2_3,_置換された文字列),!. % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/159 # # ●正規表現の使用環境 # テキスト # # ●検索か置換か? # 置換 # # ●説明 # 文章内の指定した数の改行毎に、行を一段開けたい。 # 下記例文なら改行三つごとに行を一段開けたい。 # # ●対象データ # (例文) # 人は誰しも初体験にはほろ苦く、甘酸っぱい思い出があるものだが、人生の諸先輩方はどんな童貞喪失体験をしたのか? # 「シリーズ初体験」−−現在70歳の会社役員(兵庫県)が当時の思い出を語った。 # 中学2年の時、国語の女教師に「勉強を教えてあげるから家においで」といわれ、夏休みに入ってすぐに先生の家を訪れました。 # 教師になって3年目、美人ではないけれど、私にとっては優しいお姉さんのような存在でした。 # 何人かいるのかなと思ったんですが、先生の家に行くと私の他は誰もいませんでした。 # 勉強を教わり、夕食をご馳走になり、その日は泊めてもらいました。 # 夜中、下半身がもぞもぞするので目が覚めると、先生が私の浴衣の裾を広げていました。 # # ●希望する結果 # 人は誰しも初体験にはほろ苦く、甘酸っぱい思い出があるものだが、人生の諸先輩方はどんな童貞喪失体験をしたのか? # 「シリーズ初体験」−−現在70歳の会社役員(兵庫県)が当時の思い出を語った。 # 中学2年の時、国語の女教師に「勉強を教えてあげるから家においで」といわれ、夏休みに入ってすぐに先生の家を訪れました。 # # 教師になって3年目、美人ではないけれど、私にとっては優しいお姉さんのような存在でした。 # 何人かいるのかなと思ったんですが、先生の家に行くと私の他は誰もいませんでした。 # 勉強を教わり、夕食をご馳走になり、その日は泊めてもらいました。 # # 夜中、下半身がもぞもぞするので目が覚めると、先生が私の浴衣の裾を広げていました。 # ------------------------- # よろしくお願いします。 # # '文章内の指定した数の改行毎に、行を一段開ける'(_ファイル,_n行毎) :- get_lines(_ファイル,Lines), 'n行毎に改行を挿入する'(Lines,Lines2), 表示する(_ファイル,Lines2). 'n行毎に改行を挿入する'([A,B,C|R1],[A,B,C,'\n'|R2]) :- 'n行毎に改行を挿入する'(R1,R2),!. 'n行毎に改行を挿入する'(L,L). 表示する(_ファイル,Lines) :- put_lines(_ファイル,Lines). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/157 # # ●正規表現の使用環境 # PHP 5.2 で出来ればpreg_replace()で。 # # ●検索か置換か? # 置換 # # ●説明 # "/foo/bar/baz/qux/" を "/home/bar/baz/qux/" に置換したいです。 # fooの文字数は不定です。 # # ●対象データ # /foo/bar/baz/qux/ # /qwert/asd/fghjk/klzxv/ # /qazwsx/edc/rfvt/gbyhnu/ # /4756/78674/45756/34545/4564/546/ # # ●希望する結果 # /home/bar/baz/qux/ # /home/asd/fghjk/klzxv/ # /home/edc/rfvt/gbyhnu/ # /home/78674/45756/34545/4564/546/ # # '"/foo/bar/baz/qux/" を "/home/bar/baz/qux/" に置換したい'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,_,S3,_,L2,_), L2 = [/,f,o,o,/], '"/foo/bar/baz/qux/" を "/home/bar/baz/qux/" に置換したい'(S1,S3,_置換された文字列),!. '"/foo/bar/baz/qux/" を "/home/bar/baz/qux/" に置換したい'(_文字列,_文字列). '"/foo/bar/baz/qux/" を "/home/bar/baz/qux/" に置換したい'(S1,S3,_置換された文字列) :- concat_atom([S1,'/home/',S3],_置換された文字列). '"/foo/bar/baz/qux/" を "/home/bar/baz/qux/" に置換したい'(S1,S3,_置換された文字列) :- '"/foo/bar/baz/qux/" を "/home/bar/baz/qux/" に置換したい'(S3,_置換されたS3), concat_atom([S1,'/home/',_置換されたS3). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/151 # # ●JavaScriptかPHP(なければなんでも) # ●置換 # ●現在パターンにマッチしている回数(試行回数でも)を置換後に埋め込むことできましたっけ? # ●あいうあいうあいう・・・ # ●1あいう2あいう3あいう・・・ # # # 検索パターン(L2,_検索パターン) :- L2 = _検索パターン.\ '現在パターンにマッチしている回数(試行回数でも)を置換後に埋め込む'(_文字列,_検索パターン,_置換された文字列) :- '現在パターンにマッチしている回数(試行回数でも)を置換後に埋め込む'(_文字列,[],_検索パターン,_置換された文字列). '現在パターンにマッチしている回数(試行回数でも)を置換後に埋め込む'(_文字列,Ln,_検索パターン,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), 検索パターン(L2,_検索パターン), length([_|Ln],Length), '現在パターンにマッチしている回数(試行回数でも)を置換後に埋め込む'(S3,[_|Ln],_検索パターン,_置換された文字列_2), concat_atom([S1,Length,S2,_置換された文字列_2],_置換された文字列). '現在パターンにマッチしている回数(試行回数でも)を置換後に埋め込む'(_文字列,_,_文字列). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/103 # # あけましておめでとう # # ●正規表現の使用環境 # perl5 # # ●検索か置換か? # 置換 # # ●説明 # 全角,句読点と半角の間を消したい # 半角と半角は無視 # ●対象データ # みんなの憧れ Justin Drew Bieber が大好き # 私だけの Justin が欲しい # やっぱ Bieber 、Bieber って響きがいいよね # # ●希望する結果 # みんなの憧れJustin Drew Bieberが大好き # 私だけのJustinが欲しい # やっぱBieber、Bieberって響きがいいよね # # # 今までは([ぁ-煕]+)と([0-9A-Za-z]+)を組み合わせて何回もやっていたのですが # 例題の1行目の様な物が煩わしいので一括に処理したいです # お願いします # '全角,句読点と半角の間を消したい。半角と半角は無視'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), 半角に挟まれていない空白の連続ならび(L1,L2,L3), '全角,句読点と半角の間を消したい 半角と半角は無視'(_S3,_置換された文字列_2), concat_atom([S1,S2,_置換された文字列_2],_置換された文字列),!. '全角,句読点と半角の間を消したい。半角と半角は無視'(_文字列,_文字列). 半角に挟まれていない空白の連続ならび(L1,L2,L3) :- 全て空白(L2), \+((last(L1,A),半角文字(A),L3=[C|_],半角文字(C))). 全て空白([]). 全て空白([' '|R]) :- 全て空白(R). 半角文字(' ') :- !,fail. 半角文字(_文字) :- char_code(_文字,_文字コード), _文字コード < 256. % 以下のサイトは # 出典::正規表現 Part9 #101 # # ●正規表現の使用環境 # C# # # ●検索か置換か? # 置換 # # ●説明 # 文字列の先頭の部分のカッコを消したい # # ●対象データ # (hoge)あいうえお # # ●希望する結果 # hogeあいうえお # # よろしくお願いします # # 文字列の先頭の部分のカッコを消したい(_文字列,_置換した文字列) :- atom_chars(_文字列,_文字ならび), 文字ならびの先頭の部分のカッコを消す(_文字ならび,_置換した文字ならび), atom_chars(_置換した文字列,_置換した文字ならび). 文字ならびの先頭の部分のカッコを消す(_文字ならび,_置換した文字ならび) :- 先頭部分のカッコ内の文字ならびと残り文字ならびを得る(_文字ならび,_カッコ内の文字ならび,_残り文字ならび), カッコ内の文字ならびと残り文字ならびを結合する(_カッコ内の文字ならび,_残り文字ならび,_置換した文字ならび). 先頭部分のカッコ内の文字ならびと残り文字ならびを得る(_文字ならび,_カッコ内の文字ならび,_残り文字ならび) :- append(['('|_カッコ内の文字ならび],[')'|_残り文字ならび],_文字ならび), カッコ内の文字ならびはカッコを含まない(_カッコ内の文字ならび),!. カッコ内の文字ならびはカッコを含まない(_カッコ内の文字ならび) :- \+(member('(',_カッコ内の文字ならび)), \+(member(')',_カッコ内の文字ならび)). カッコ内の文字ならびと残り文字ならびを結合する(_カッコ内の文字ならび,_残り文字ならび,_置換した文字ならび) :- append(_カッコ内の文字ならび,_残り文字ならび,_置換した文字ならび). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1323566370/41 # # ●正規表現の使用環境 # c# # # ●検索か置換か? # 検索 # # ●説明 # 一番長い数字の連続を検索したいです # # ●対象データ # hogehoge120_hoge001218hoge1 # # ●希望する結果 # 001218 # # 一番長い数字の連続を検索したいです(_文字列,_前文字列,_適合文字列,_後文字列) :- '数字文字列の位置・長さの選択'(_文字列,L), 最大長の数字文字列(L,_文字列,_前文字列,_適合文字列,_後文字列). '数字文字列の位置・長さの選択'(_文字列,L) :- findall([P2,P1,P3],( sub_atom(_文字列,P1,P2,P3,S1,S2,S3,L1,L2,L3), 全て数字(L2), \+((last(L1,A),数字(A))), \+((L3=[B|_],数字(B)))), L). 最大長の数字文字列(L,_文字列,_前文字列,_適合文字列,_後文字列) :- max(L,[_最大長,_,_]), member([_最大長,P1,P3],L), 文字列の切り取り(_文字列,P1,_最大長,P3,_前文字列,_適合文字列,_後文字列). 文字列の切り取り(_文字列,P1,P2,P3,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,P1,P2,P3,_適合文字列), sub_atom(_文字列,0,P1,_,_前文字列), sub_atom(_文字列,P1+P2,_,0,_後文字列). 数字(A) :- member(A,['0','1','2','3','4','5','6','7','8','9']). 全て数字([]). 全て数字([A|R]) :- 数字(A), 全て数字(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/962 # # 対象 # ABCこの間に文字列があったりなかったりDEF # # 結果 # DEF # # "ABC"よりも後続にある(最初の)"DEF"だけを対象としたいです # 戻り読み条件が、長さ一定でなくてもOKならばできるのですが・・・ # # '"ABC"よりも後続にある(最初の)"DEF"だけを対象としたいです。戻り読み条件が、長さ一定でなくてもOKならばできるのですが・・・ '(_文字列,_前文字列,'DEF',_後文字列) :- atom_chars(_文字列,Chars), append(L1,['A','B','C'|R1],Chars), append(L2,['D','E','F'|R2],R1), append(L1,['A','B','C'|L2],Chars1), atom_chars(_前文字列,Chars1), atom_chars(_後文字列,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/962 # # 対象 # ABCこの間に文字列があったりなかったりDEF # # 結果 # DEF # # "ABC"よりも後続にある(最初の)"DEF"だけを対象としたいです # 戻り読み条件が、長さ一定でなくてもOKならばできるのですが・・・ # # '"ABC"よりも後続にある(最初の)"DEF"だけを対象としたいです。戻り読み条件が、長さ一定でなくてもOKならばできるのですが・・・ '(_文字列,_前文字列,'DEF',_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,'DEF',_後文字列,_,_,_), sub_atom(_前文字列,_,3,_,'ABC'). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/929 # # AをB、BをC・・・と # アルファベットをひとつずつずらすには、どうやって書いたらいいでしょうか? # サクラエディタでの置換を考えてます # # 'AをB、BをC・・・とアルファベットをひとつずつずらす'(_文字列,_アルファベットをひとつずつずらされた文字列) :- findall(_ずらした文字,( sub_atom(_文字列,_,1,_,_文字), アルファベットをひとつずらす(_文字,_ずらした文字)), L), concat_atom(L,_アルファベットをひとつずらされた文字列). アルファベットをひとつずらす(_文字,_ずらした文字) :- append(_,[_文字,_ずらした文字|_],[a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z]),!. アルファベットをひとつずらす(_文字,_ずらした文字) :- append(_,[_文字,_ずらした文字|_],['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y',Z']),!. アルファベットをひとつずらす(_文字,_文字). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/916 # # 質問です。 # # 数字と文字が混在する文字列の中から、数字だけを取り出すことは可能でしょうか? # (ただし、複数個の数字文字列としてではなく、一つの文字列として取り出す場合) # # 例えば # 「a12b3cd456efg」から「123456」を取り出す # (「12」と「3」と「456」ではなく) # # '数字と文字が混在する文字列の中から、数字だけを取り出す。ただし、複数個の数字文字列としてではなく、一つの文字列として取り出す'(_文字列,_数字文字列) :- findall(_数字,( sub_atom(_文字列,_,1,_,_文字), member(_文字,['0','1','2','3','4','5','6','7','8','9'])), L), concat_atom(L,_数字文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/865 # # ../test/read.cgi/tech/1301067486/864 失礼しました # # ●正規表現の使用環境 # psstpsstというリネームソフト(Perl互換) # # ●検索か置換か? # 置換 # # ●説明 # 最大4桁で書かれた数字部分を3桁に統一したい # # ●対象データ # ABCA01.txt # BCAA2.txt # CABA0255.txt # # ●希望する結果 # AAA001.txt # AAA002.txt # AAA255.txt # # どうぞよろしくおねがいします # # 最大4桁で書かれた数字部分を3桁に統一したい(_文字列,_固定部分ファイル名,_置換された文字列) :- sub_atom(Line,_,_,_,S1,S2,S3,L1,L2,L3), ファイル部分の特定(S1,L2,L2_0,L2_1), 最大4桁で書かれた数字部分を3桁に統一したい(_固定部分ファイル名,S1,L2_0,L2_1,S3,_置換された文字列). ファイル部分の特定(S1,L2,L2_0,L2_1) :- \+((sub_atom(S1,_,1,0,A),ファイルを構成する文字(A))), append(L2_0,L2_1,['.',t,x,t],L2), すべて数字(L2_1), last(L2_0,B), \+(数字(B)). 最大4桁で書かれた数字部分を3桁に統一したい(_固定部分ファイル名,S1,L2_1,S3,_置換された文字列) :- 三桁の数字に変換する(L2_1,_三桁の数字列), concat_atom([S1,_固定部分ファイル名,_三桁の数字列,'.txt',S3],_置換された文字列). 最大4桁で書かれた数字部分を3桁に統一したい(_固定部分ファイル名,S1,L2_1,S3,_置換された文字列) :- 最大4桁で書かれた数字部分を3桁に統一したい(S3,_固定部分ファイル名,_置換された文字列_1), concat_atom([S1,_固定部分ファイル名,_三桁の数字列,'.txt',_置換された文字列_1],_置換された文字列). ファイルを構成する文字(A) :- 数字(A),!. ファイルを構成する文字(A) :- A @>= 'A', A @=< 'Z',!. ファイルを構成する文字(A) :- A @>= 'a', A @=< 'z',!. ファイルを構成する文字(A) :- member(A,['-','_','#','$','~','&']),!. 数字(A) :- member(A,['0','1','2','3','4','5','6','7','8','9']). 全て数字([]). 全て数字([A|R]) :- 数字(A), 全て数字(R). 三桁の数字に変換する(L,_三桁の数字) :- concat_atom(['0','0','0'|L],S1), sub_atom(S1,_,3,0,_三桁の数字). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/828 # # PHP Version 5.2.9 # preg_matchです。 # # 電話番号の認証として、 # /^\d[\d\-]+\d$/D # を使用していますが、 # 「1--3」のようなハイフン記号が続く場合の入力を許可してしまっています。 # # 要件として、厳密な電話番号ルールは必要ではありません。 # データとして「1-2-3」などを許可しています。 # # よろしくお願いいたします。 # # '電話番号の認証'(_文字列) :- atom_chars(_文字列,Chars), '電話番号の認証'(Chars). '電話番号の認証'(Chars) :- append(L1,[-|R2],[-|R3],Chars), 全て数字(L1),\+(L1=[]), 全て数字(R2),\+(R2=[]), 全て数字(R3),\+(R3=[]),!. '電話番号の認証'(Chars) :- append(L1,[-|R2],Chars), 全て数字(L1),\+(L1=[]), 全て数字(R2),\+(R2=[]),!. '電話番号の認証'(Chars) :- append(L1,['('|R2],[')'|R3],Chars), 全て数字(L1),\+(L1=[]), 全て数字(R2),\+(R2=[]), 全て数字(R3),\+(R3=[]),!. '電話番号の認証'(Chars) :- append([('|R1],[')'|R2],['-'|R3],Chars), 全て数字(R1),\+(R1=[]), 全て数字(R2),\+(R2=[]), 全て数字(R3),\+(R3=[]),!. '電話番号の認証'(Chars) :- append([('|R1],[')'|R2], 全て数字(R1),\+(R1=[]), 全て数字(R2),|+(R2=[]), 全て数字(R3),\+(R3=[]),!. '電話番号の認証'(Chars) :- append(L1,[-|R2],Chars), 全て数字(L1),\+(L1=[]), 全て数字(R2),\+(R2=[]),!. '電話番号の認証'(Chars) :- 全て数字(Chars). 全て数字([]) :- !. 全て数字([A|R]) :- member(A,['0','1','2','3','4','5','6','7','8','9']), 全て数字(R). % 以下のサイトは ?- 'a##'. # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/821 # # aの4回以上8回以下の繰り返し「 ^a{4,8}$ 」 # ではなくて、 # 「aの4回または8回の繰り返し」 # を ^(a{4}|a{8})$ のように「a」を2回使用せずに、「a」を1回だけ使用して指定する方法を教えてください。 # # 'aの4回または8回の繰り返し'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), \+(last(L1,'a')), \+(L3=[a|_]), 'aの4回または8回繰り返し'(L2). 'aの4回または8回の繰り返し'([a,a,a,a,a,a,a,a]). 'aの4回または8回の繰り返し'([a,a,a,a]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/814 # # Javaでaaaa1.txt と bbbb2_2.txtというファイル名が有り、 # aaaaと1、bbbb2_と2を抽出したい # どう書いたらいい? # 'aaaa1.txt と bbbb2_2.txtというファイル名が有り、aaaaと1、bbbb2_と2を抽出したい'(_文字列,_ファイル名,_指標) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), 'aaaa1.txt と bbbb2_2.txtというファイル名が有り、aaaaと1、bbbb2_と2を抽出したい'(L2,_ファイル名,_指標). 'aaaa1.txt と bbbb2_2.txtというファイル名が有り、aaaaと1、bbbb2_と2を抽出したい'([a,a,a,a|R],aaaa,_指標) :- 指標を得る(R,_指標). 'aaaa1.txt と bbbb2_2.txtというファイル名が有り、aaaaと1、bbbb2_と2を抽出したい'([b,b,b,b,_,2|R],bbbb_2,_指標) :- 指標を得る(R,_指標). 指標を得る(L,_指標) :- append(L1,['.',t,x,t],L), number_chars(_指標,L1). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/799 # # ●正規表現の使用環境 # 秀丸 # # ●検索か置換か? # 置換 # # ●説明 # 文字列の中に同じ文字が2つ以上含まれる行を削除したい # # ●対象データ # aaaaaaaa # abcabcab # abcdefgh # agbchddf # cbfdaehg # dbcahebg # dffbdeha # echfbgad # fbadcaeh # habcdefg # # ●希望する結果 # abcdefgh # cbfdaehg # echfbgad # habcdefg # # # # 見づらいかと思いますが # どうかよろしくお願いします。 # # 文字列の中に同じ文字が2つ以上含まれる行を削除したい([],[]). 文字列の中に同じ文字が2つ以上含まれる行を削除したい([_|R1],R2) :- 同じ文字が2つ以上含まれる行は削除する(_行), 文字列の中に同じ文字が2つ以上含まれる行を削除したい(R1,R2). 文字列の中に同じ文字が2つ以上含まれる行を削除したい([A|R1],[A|R2]) :- 文字列の中に同じ文字が2つ以上含まれる行を削除したい(R1,R2). 同じ文字が2つ以上含まれる行は削除する(_行) :- atom_chars(_行,_文字ならび), 整列(_文字ならび,_整列された文字ならび), 整列した要素に重複がある(_整列された文字ならび). 整列した要素に重複がある([A,A|_]) :- !. 整列した要素に重複がある([_|R]) :- 整列した要素に重複がある(R). % 以下のサイトは ?- 'a##'. # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/785 # # 質問です。 # # 文字ストリング「"山田","太郎",,"",,"自宅TEL","03-4567-8901"」から、 # 「"山田"」、「"太郎"」、「""」、「"自宅TEL"」、「"03-4567-8901"を取り出したいのですが、 # 対象を「.+?」で指定すると、 # 「"山田"」、「"太郎"」、「"",,"」、「","」が取り出されます。 # どのような指定にすれば良いのでしょうか # # '文字ストリング「"山田","太郎",,"",,"自宅TEL","03-4567-8901"」から、「"山田"」、「"太郎"」、「""」、「"自宅TEL"」、「"03-4567-8901"を取り出したい'(_文字列,_取り出したい文字列ならび) :- split(_文字列,[','],_取り出したい文字列ならび). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/777 # # JavaScriptで # aa1 # っていう文字列の塊を1セットで[a-z]{2}[0-9]と表します # この文字列が # fi1cs2bc3wr4 # ってう風に4回繰り返されている場合にヒットさせる正規表現はどうかくのでしょうか? # ([a-z]{2}[0-9]){4}って感じで書いてみたんですけど(〜){数字}のケースって見たことないんですがどうでしょうか # # ある文字パターンが四回繰り返されているパターン(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), ある文字パターンが四回繰り返されている(L2). ある文字パターンが四回繰り返されている(L) :- append(A,B,L1), append(L1,C,L2), append(L2,D,L). 同一パターン([A,B,C,D],_). 同一パターン([],_) :- !. 同一パターン([A|R],N) :- パターン候補(A,1), 同一パターン(R,N). パターン候補(A,1) :- 一文字目がアルファベット(A), 二文字目がアルファベット(A), 三文字目が数字(A). 一文字目が英文字(A) :- sub_atom(A,0,1,_,A1), 英文字(A1),!. 二文字目が英文字(A) :- sub_atom(A,1,1,_,A2), 英文字(A2),!. 三文字目が数字(A) :- sub_atom(A,2,1,_,A3), A3 @>= '0', A3 @=< '9',!. 英文字(A) :- A @>= 'a', A @=< 'z',!. 英文字(A) :- A @>= 'A', A @=< 'Z',!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/762 # # ●正規表現の使用環境 # MySQL4.1のREGEXP # ●検索か置換か? # 検索 # ●説明 # カラム内に <> を含むテキストデータがあるのですが # 調べたい数字が入っているかを調べたい # # ●対象データ # 3<>4 # 5<>32<>2 # 5<>3<>6 # 3 # 4 # # この中から3を含むものを検索したい(32はヒットしないように) # # ●希望する結果 # 3<>4 # 5<>3<>6 # 3 # # 'カラム内に <> を含むテキストデータがあるのですが調べたい数字が入っているかを調べたい'(_カラムならび,_調べたい数字,_適合カラム) :- append(_,[_カラム|_],_カラムならび), 調べたい数字が入っているか(_カラム). 調べたい数字が入っているか(_,_調べたい数字) :- !. 調べたい数字が入っているか(_カラム,_調べたい数字) :- split(_カラム,['<>'],L), append(_,[_調べたい数字|_],L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/727 # # わかりにくい質問かもしれませんがよろしくお願いします。 # # ●正規表現の使用環境 # Java(Android) # # ●検索か置換か? # 検索 # # ●説明 # 文字列から、数値を含むURLを検索し、その数値を取得したい # # ●対象データ # http://ime.nu/some_website.net/category:63 # http://ime.nu/some_website.net/category:19 # ・・・ # のように、数値を含むURLを含んだ文字列 # # ●希望する結果 # http://ime.nu/some_website.net/category:63 # だったら、63を取得 # # '文字列から、数値を含むURLを検索し、その数値を取得したい'(_文字列,_前文字列,_適合文字列,_後文字列) :- '数値を含むURLを検索し'(_文字列,_前文字列_1,_数値を含むURL,_後文字列_1), 数値を取得したい(_数値を含むURL,_前文字列_2,_適合文字列,_後文字列_2), concat_atom([_前文字列_1,_前文字列_2],_前文字列), concat_atom([_後文字列_2,_後文字列_1],_後文字列). '数値を含むURLを検索し'(_文字列,_前文字列,_数値を含むURL,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列_1,_数値を含むURL_1,_後文字列_1,L1,L2,L3), 'URLである'(L2), 'L3は[]であるか先頭が空白'(L3), '数値を含むURLを検索し'(_前文字列_1,_数値を含むURL_1,_後文字列_1,_前文字列,_数値を含むURL,_後文字列). '数値を含むURLを検索し'(_前文字列,_数値を含むURL,_後文字列,_前文字列,_数値を含むURL,_後文字列). '数値を含むURLを検索し'(_前文字列_1,_数値を含むURL_1,_後文字列_1,_前文字列,_数値を含むURL,_後文字列) :- '数値を含むURLを検索し'(_後文字列_1,_前文字列_2,_数値を含むURL,_後文字列), concat_atom([_前文字列_1,_数値を含むURL_1,_前文字列_2],_前文字列). 'URLである'([h,t,t,p,:,/,/|R]) :- \+(member(' ',R)),!. 'URLである'([h,t,t,p,s,:,/,/|R]) :- \+(member(' ',R)),!. 'URLである'([f,t,p,:,/,/|R]) :- \+(member(' ',R)),!. 'URLである'([f,i,l,e,:,/,/|R]) :- \+(member(' ',R)),!. 'L3は[]であるか先頭が空白'([]) :- !. 'L3は[]であるか先頭が空白'([' '|_]). 数値を取得したい(_数値を含むURL,_前文字列,_適合文字列,_後文字列) :- sub_atom(_数値を含むURL,_,_,_,_前文字列_1,_適合文字列_1,_後文字列_1,L1_1,L2_1,L3_1), 全てが数字(L1), \+((last(L1,A),数字(A))), \+((L3 = [B|_],数字(B))). 数値を取得したい(_前文字列_1,_適合文字列_1,_後文字列_1,_前文字列,_適合文字列,_後文字列). 数値を取得したい(_前文字列,_適合文字列,_後文字列,_前文字列,_適合文字列,_後文字列). 数値を取得したい(_前文字列_1,_適合文字列_1,_後文字列_1,_前文字列,_適合文字列,_後文字列) :- 数値を取得したい(_後文字列_1,_前文字列_2,_適合文字列,_後文字列), concat_atom([_前文字列_1,_適合文字列_1,_前文字列_2],_前文字列). 全てが数字([]). 全てが数字([A|R]) :- 数字(A), 全てが数字(R). 数字(A) :- member(A,['0','1','2','3','4','5','6','7','8','9']),!. 数字(A) :- member(A,[0,1,2,3,4,5,6,7,8,9]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/681 # # 0パディングされてない1〜3桁の数字のみにヒットさせる正規表現ってどのように書けますか? # # ヒットする例 # 0 # 9 # 10 # 19 # 99 # 100 # 999 # # ヒットさせない例 # 00 # 000 # 09 # 010 # 019 # 099 # 0100 # # '0パディングされてない1〜3桁の数字のみにヒットさせる'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列_1,_適合文字列_1,_後文字列_1,L1,L2,L3), for(3,Len,1), length(L2,Len), 全て数字(L2), \+((last(L1,C1),数字(C1))), L2 = [A2|R2], ((\+(A2='0');R2=[])), '0パディングされてない1〜3桁の数字のみにヒットさせる'(_文字列,_前文字列_1,_適合文字列_1,_後文字列_1,_前文字列,_適合文字列,_後文字列). '0パディングされてない1〜3桁の数字のみにヒットさせる'(_文字列,_前文字列,_適合文字列,_後文字列,_前文字列,_適合文字列,_後文字列). '0パディングされてない1〜3桁の数字のみにヒットさせる'(_文字列,_前文字列_1,_適合文字列_1,_後文字列_1,_前文字列,_適合文字列,_後文字列) :- '0パディングされてない1〜3桁の数字のみにヒットさせる'(_後文字列,_前文字列_2,_適合文字列,_後文字列), append(_前文字列_1,_適合文字列_1,_前文字列_2,_前文字列). 全て数字([]). 全て数字([A|R]) :- A @>= '0', A @=< '9', 全て数字(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/647 # # <hoge>aaa</hoge> # bbb # <hoge>ccc</hoge> # # <hoge></hoge>に囲まれてる文字を大文字に置き換える処理をしてるのですが、 # <hoge>(.*)</hoge>で一応できます。 # <hoge>(.*)?</hoge>と?をつけてもできるのですが、 # どっちが正しいのでしょうか? # # '<hoge></hoge>に囲まれてる文字を大文字に置き換える'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), L2 = [<,h,o,g,e,>|R2], append(R22,[<,/,h,o,g,e,>],R2), findall(B,( member(A,R22), to_upper(A,B)), R23), concat_atom([<,hoge,>,R23,<,'/hoge',>],S23), concat_atom([S1,S23],_置換された部分までの文字列), concat_atom([S1,S23,S3],_置換された文字列_1), '<hoge></hoge>に囲まれてる文字を大文字に置き換える'(_文字列,_置換された部分までの文字列,S3,_置換された文字列_1,_置換された文字列). '<hoge></hoge>に囲まれてる文字を大文字に置き換える'(_文字列,_置換された部分までの文字列,_,_置換された文字列,_置換された文字列). '<hoge></hoge>に囲まれてる文字を大文字に置き換える'(_文字列,_置換された部分までの文字列,_後文字列,_置換された文字列,_置換された文字列) :- '<hoge></hoge>に囲まれてる文字を大文字に置き換える'(_後文字列,_置換された文字列_1), concat_atom([_置換された部分までの文字列,_置換された文字列_1],_置換された文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/620 # # ●正規表現の使用環境 # Windowsコマンドプロンプト、filestr # # ●検索か置換か? # 検索 # # ●説明 # 全角英の大文字または小文字または全角数字が含まれているか検索したい # # ●対象データ # 以下batで失礼します # set a="Ape" # set b="Bape" # set c="222" # ●希望する結果 # %a%、%b%、%c%から検索して、"Ape"、"Bape"、"222"、という結果を表示できるようする正規表現または、それを含めたコマンド # ●試したコマンド # echo %a%|findstr /r "[A-Z]" # echo %b%|findstr /r "a-z" # echo %c%|findstr /r \[0-9\] # echo %c%|findstr /r "\[0-9\]" # echo %a%|findstr "[A-Z]" # echo %b%|findstr "a-z" # echo %c%|findstr a-z # findstr /r [A-Z] %a% # findstr /r [a-z] %b% # findstr /r [0-9] %c% # 上記のコマンドは間違っていて結果が全て空欄になっています。正しい場合は # set d=" あああ" # echo %d%|findstr /r /c:"^. ." # こちらの画面を見て頂ければと思います。それではどうかよろしくお願いします。 # # '全角英の大文字または小文字または全角数字が含まれているか検索する'(_文字列,_前文字列,_適合全角文字,_後文字列) :- atom_chars(_文字列,Chars), append(L0,[_適合全角文字|R],Chars), '全角英の大文字または小文字または全角数字が含まれているか'(_適合全角文字), atom_chars(_前文字列,L0), atom_chars(_後文字列,R). '全角英の大文字または小文字または全角数字が含まれているか'(A) :- '全角英の大文字が含まれている'(A),!. '全角英の大文字または小文字または全角数字が含まれているか'(L,L0,A,R) :- '全角英の小文字が含まれている'(A),!. '全角英の大文字または小文字または全角数字が含まれているか'(L,L0,A,R) :- '全角数字が含まれている'(A),!. '全角英の大文字が含まれている'(A) :- A @>= A, A @=< Z,!. '全角英の大文字が含まれている'(A) :- A @>= a, A @=< z,!. '全角英の数字が含まれている'(A) :- A @>= 1, A @=< 9,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/594 # # 正規表現は、既出かどうかってのがわかりにくいね。 # # ●正規表現の使用環境 # Java1.6 # # ●検索か置換か? # 検索 # # ●説明 # 変数文字列とその添字の取得 # # ●対象データ # $AAA.BBB+$CCC.DDD.EEE(1234)-#FFF*#GGG.HHH(567) # # ●希望する結果 # 検索1回目 # group1 : $AAA.BBB # # 検索2回目 # group1 : $CCC.DDD.EEE # group2 : 1234 # # 検索3回目 # group1 : #FFF # # 検索4回目 # group1 : #GGG.HHH # group2 : 567 # # # ($.*)\\(([0-9]*)\\) # これで、$CCC.DDD.EEE(1234)をみつけれるのは出来たけど、添え字が無い場合を引っ掛けるのができない。 # # '変数文字列とその添字の取得'(_文字列,_前文字列,_適合文字列,_後文字列,Group1,Group2) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,['$'|R2],L3), \+((member(A,R),member(A,['+','-','*','/']))), '[]であるか先頭に+,-,*,/,が来る'(L3), group検査(R2,Group1,Group2). '[]であるか先頭に+,-,*,/,が来る'([]) :- !. '[]であるか先頭に+,-,*,/,が来る'([A|_]) :- member(A,[+,-,*,/]),!. group検査(R2,Group1,'') :- \+(append(_,['('|_],R2)), atom_chars(Group1,R2),!. group検査(R2,Group1,Group2) :- atom_chars(Group1,R2), append(_,['('|R3],R2), append(L0,[')'|_],R3), atom_chars(Group2,L0),!. % 以下のサイトは # abcdefgfedcba という文字列から # defという文字列を消すこと出来るのですが、 # def以外を消すにはどうすればいいのでしょうか? 'abcdefgfedcba という文字列からdef以外を消す'(_文字列,_削除された文字列) :- sub_atom(_文字列,S,Len,R,def), S2 is S + Len, sub_atom(_文字列,S2,R,0,S3), 'abcdefgfedcba という文字列からdef以外を消す'(S3,_後半の削除された文字列), concat_atom([def,_後半の削除された文字列],_削除された文字列),!. 'abcdefgfedcba という文字列からdef以外を消す'(_文字列,''). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/570 # # 小文字英字、大文字英字、数字、「@_#」、のどれか3つが入っているかの条件は正規表現で可能でしょうか? # どれか3つのやり方がわかりません。 # # 以下は全く動作せず… # ^(?=(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])|(?=.*[A-Z])(?=.*[a-z])(?=.*[@_#])).*$ # # '小文字英字、大文字英字、数字、「@_#」、のどれか3つが入っているか'(_文字列) :- findall(_,'小文字英字、大文字英字、数字、「@_#」、のどれか'(_文字列),L), '3つが入っている'(L). '小文字英字、大文字英字、数字、「@_#」、のどれか'(_文字列) :- 小文字英字(_文字列). '小文字英字、大文字英字、数字、「@_#」、のどれか'(_文字列) :- 大文字英字(_文字列). '小文字英字、大文字英字、数字、「@_#」、のどれか'(_文字列) :- 数字(_文字列). '小文字英字、大文字英字、数字、「@_#」、のどれか'(_文字列) :- '@_#'(_文字列). 小文字英字(_文字列) :- sub_atom(_文字列,_,1,_,_文字), _文字 @>= 'a', _文字 @=< 'z',!. 大文字英字(_文字列) :- sub_atom(_文字列,_,1,_,_文字), _文字 @>= 'A', _文字 @=< 'Z',!. 数字(_文字列) :- sub_atom(_文字列,_,1,_,_文字), _文字 @>= '0', _文字 @=< '9',!. '@_#'(_文字列) :- sub_atom(_文字列,_,3,_,'@_#'),!. '3つが入っている'(L) :- length(L,3). % このPrologプログラムのポイントは 小文字英字/1, 大文字英字/1, 数字/1, '@_#'/1 % 各述語の本体最後のカットです。組込み述語sub_atom/5は非決定性の述語なので % このカットがないと例えば小文字英数がn個あれば、n個分_を収集してしまいます。 % 文字種検査は一度現れたらそれまで。ただ一とだけ勘定したいのです。 % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/563 # # ●正規表現の使用環境 # Perl5 or Javascript # # ●検索か置換か? # 検索 # # ●説明 # ダブルクオートに囲まれた文字列を取得したい # ただ、「\」の次の文字はエスケープされた文字として扱う # # ●対象データ # "hogefuga" # "hoge\"fuga" # "hoge\\"fuga" # # ●希望する結果 # hogefuga # hoge"fuga # hoge\ # # # 上記のようなありきたりな命題にトライしていたのですが、以下の正規表現のうち1ではうまくいくのに2ではうまくいきませんでした # 1. /"((?:(?:\\.)|[^"])*)"/ # 2. /"((?:[^"]|(?:\\.))*)"/ # # # ただ、僕にはこれが両方同じ意味に見えるのです # # なぜこの場合、2ではうまくいかないのでしょうか # 気になって眠れません # 詳しい方解説お願いします # # 'ダブルクオートに囲まれた文字列を取得したい。ただ、「\\」の次の文字はエスケープされた文字として扱う'(_対象文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_対象文字列,_,_,_,_前文字列,_,_後文字列,L1,L2,L3), sub_atom(_後文字列,0,1,_,'"'), sub_atom(_前文字列,_,1,0,'"'), '「\\」の次の文字はエスケープされた文字として扱う'(L2,Chars), atom_chars(_適合文字列,Chars). '「\\」の次の文字はエスケープされた文字として扱う'([],[]) :- !. '「\\」の次の文字はエスケープされた文字として扱う'(['"'|_],_) :- !,fail. '「\\」の次の文字はエスケープされた文字として扱う'(['\\',A|R1],[A|R2]) :- '「\\」の次の文字はエスケープされた文字として扱う'(R1,R2),!. '「\\」の次の文字はエスケープされた文字として扱う'([A|R1],[A|R2]) :- '「\\」の次の文字はエスケープされた文字として扱う'(R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/546 # # ●正規表現の使用環境 # Microsoft .NET Framework # # ●検索か置換か? # 検索 # # ●説明 # 下記条件(AND条件)のURLを検索したいです。 # ・特定のドメイン(yahoo.co.jp)がhttp://ime.nu/直後に含まれない。 # ・特定の拡張子(jpg,gif)で終わらない。 # # ●対象データ # 1.http://ime.nu/yahoo.co.jp/?=abc # 2.http://ime.nu/yahoo.co.jp/abc.jpg # 3.http://2ch.net/?=abc # 4.http://2ch.net/abc.jpg # ・・・など複数URL # # ●希望する結果 # 3のみを検索したいです。 # # よろしくお願いします。 # # '下記条件(AND条件)のURLを検索したいです。・特定のドメイン(yahoo.co.jp)がhttp://ime.nu/直後に含まれない。・特定の拡張子(jpg,gif)で終わらない。'(_対象文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_対象文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), sub_atom(適合文字列,0,7,_,'http://'), 'URLの終止条件'(L3), \+(排除条件(L2)). 'URLの文字種検査'([]) :- !. 'URLの文字種検査'([A|R]) :- アルファベット(A), 'URLの文字種検査'(R). 'URLの文字種検査'([A|R]) :- 数字(A), 'URLの文字種検査'(R). 'URLの文字種検査'([A|R]) :- 'URLに許される特定の英記号'(A), 'URLの文字種検査'(R). アルファベット(A) :- A @>= 'A', A @=< 'Z',!. アルファベット(A) :- A @>= 'a', A @=< 'z',!. 数字(A) :- A @>= '0', A @=< '9',!. 'URLに許される特定の英記号'(A) :- member(A,['%','&','=','_','-','.','/','~','#']),!. 'URLの終止条件'(['\n'|R3]) :- !. 'URLの終止条件'([' '|_]) :- !. 'URLの終止条件'(['\t'|_]) :- !. 排除条件([h,t,t,p,:,/,/,i,m,e,'.',n,u,/,y,a,h,o,o,'.',c,o,'.',j,p|_]) :- !. 排除条件([h,t,t,p,:,/,/|R]) :- append(_,[g,i,f],R),!. 排除条件([h,t,t,p,:,/,/|R]) :- append(_,[j,p,g],R),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/541 # # ●正規表現の使用環境 # 一般社会 # # ●検索か置換か? # 検索 # # ●説明 # すぐにやれる女を見つけたいです # # ●対象データ # OL # 女子大生 # 女子高生 # キャバ嬢 # ヘルス嬢 # 近所のおばさん # 母親 # # ●希望する結果 # させこ # やりまん # 公衆便所 # すぐにやれる女(させこ). すぐにやれる女(やりまん). すぐにやれる女(公衆便所). 'すぐにやれる女を見つけたいです'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,_,_,_), すぐにやれる女(_適合文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/538 # # ●正規表現の使用環境 Flexible Renamer # ●検索か置換か? 置換 # ●説明 # 日付の前の文字を入れ替える # ●対象データ # ABC11-12-31 \d{2}-[A-Z]{3}-\d{2} # ABC11-DEC-31 \d{2}-\d{2}-\d{2} # ABC2011-12-31 \d{4}-[A-Z]{3}-\d{2} # ABC2011-DEC-31 \d{4}-\d{2}-\d{2} # ●希望する結果 # XYZ11-12-31 # XYZ11-DEC-31 # XYZ2011-12-31 # XYZ2011-DEC-31 # ●コメント:こんな感じか書いて投稿してみた # 日付の前の文字を入れ替える(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), append(['A','B','C'|R21],[-|R22],[-|R23],L2), 年の文字ならび(R21), 月の文字ならび(R22), 日の文字ならび(R23), append(['X','Y','Z'|R1],[-|R22],[-|R23],L22), atom_chars(S22,L22), concat_atom([S1,S22,S3],_置換された文字列). 日付の前の文字を入れ替える(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), append(['A','B','C'|R21],[-|R22],[-|R23],L2), 年の文字ならび(R21), 月の文字ならび(R22), 日の文字ならび(R23), append(['X','Y','Z'|R1],[-|R22],[-|R23],L22), atom_chars(S22,L22), 日付の前の文字を入れ替える(S3,_置換された文字列のニ), concat_atom([S1,S22],_置換された文字列の一), concat_atom([_置換された文字列の一,_置換された文字列のニ],_置換された文字列). 日付の前の文字を入れ替える(_文字列,_文字列). 年の文字ならび(R21) :- length(R21,4), すべて数字(R21),!. 年の文字ならび(R21) :- length(R21,2), すべて数字(R21),!. 月の文字ならび(R22) :- length(R22,1), すべて数字(R22),!. 月の文字ならび(R22) :- member(A,['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC']), atom_chars(A,R22),!. 日の文字ならび(R21) :- length(R21,2), すべて数字(R21),!. 日の文字ならび(R21) :- length(R21,1), すべて数字(R21),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1312201995/477 # # [1] アルゴリズム論 # [2] Unixコマンドのgrepを実装したmygrepの作成 #   コマンドライン引数で検索文字列とファイル名をもらい、ファイル内に検索文字列が含まれる行があればその行を出力する #   正規表現に対応させる必要はない # [3] # [3.1]windows xp  # [3.2]gcc  # [3.3]c言語 # [4] 無期限 # [5] strstrは使用禁止 # # よろしくおねがいします # program :- user_paramaters([_検索文字列,_ファイル名]), open(_ファイル名,read,Instream), grep_line(Instream,_検索文字列), close(Instream), halt. grep_line(Instream,_検索文字列) :- at_end_of_stream(Instream),!. grep_line(Instream,_検索文字列) :- get_line(Stream,Line), sub_atom(Line,_,_,_,_検索文字列), writef('%t\n',[Line]), fail. grep_line(Instream,_検索文字列) :- grep_line(Instream,_検索文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/503 # # ●正規表現の使用環境 # oracle(regexp_replace) # ●検索か置換か? # 置換 # ●説明 # ::でタグ名が記載されたデータを<>タグに変換したい # ●対象データ # :dog:I like dog # :cat:I like cat # ●希望する結果 # <dog>I like dog</dog> # <cat>I like cat</cat> # '::でタグ名が記載されたデータを<>タグに変換したい'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), L2 = [:|R2], last(R2,:), atom_chars(S21,R2), concat_atom([S1,<,S21,>],S22), '最初に現れたS21の後にを付加する'(S3,S21,S31,_), concat_atom([S22,S31],_置換された文字列). '::でタグ名が記載されたデータを<>タグに変換したい'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), L2 = [:|R2], last(R2,:), atom_chars(S21,R2), concat_atom([S1,<,S21,>],S22), '最初に現れたS21の後にを付加する'(S3,S21,S31,_残り文字列), concat_atom([S22,S31],_置換された文字列の一), '::でタグ名が記載されたデータを<>タグに変換したい'(_残り文字列,_置換された文字列のニ), concat_atom([_置換された文字列の一,_置換された文字列のニ],_置換された文字列). '::でタグ名が記載されたデータを<>タグに変換したい'(_文字列,_文字列). '最初に現れたS21の後にを付加する'(_文字列,S21,S31,S3) :- sub_atom(_文字列,_,_,_,S1,S21,S3,L1,L2,L3), concat_atom([S1,S21,'<',S21,'>'],S31),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/784 # # ttp://aaa.co.jp:8888 # http://bbb.com:9999/ # を除外しつつ # 他の # h?ttp://○○○.△△△.□□□:☆☆☆/? #      ↑ここから      ここまで↑ # をヒットさせたいのですが色々試したのですが出来ませんでした # 何か方法がありますでしょうか? # # 'ttp://aaa.co.jp:8888とhttp://bbb.com:9999/を以外のURLの内、第3ドメインからトップドメインまでの部分'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_S1,S2,_後文字列,L1,[h,t,t,p,:,/,/|R2],[/|R3]), 除外URLではない(_適合文字列), \+(member(/,R2)), concat_atom([S1,'http://'],_前文字列), atom_chars(_適合文字列,R2). '除外URLではない'(S) :- \+(sub_atom(S,0,20,_,'ttp://aaa.co.jp:8888')),!. '除外URLではない'(S) :- \+(sub_atom(S,0,20,_,'http://bbb.com:9999/')),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/748 # # 「次の人」または「前の人」という文字列を文章内から拾う場合、どの様な書き方が良いのでしょうか?? # [次の人 | 前の人] だと「の」一文字だけでも拾ってしまいます… # '「次の人」または「前の人」という文字列を文章内から拾う'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), '「次の人」または「前の人」という文字列'(_適合文字列). '「次の人」または「前の人」という文字列'(次の人). '「次の人」または「前の人」という文字列'(前の人). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/745 # # Aの繰り返しはA+とかA{m,n}でマッチできますが、 # 繰り返された個数を元にAAAAAをA*5などに置換する「うまい」方法はあるでしょうか。 # # 言語はとりあえずJavaScriptで考えています。 # replace(/A+/g, 'A*'); //←ここから進まない。 # # '繰り返された個数を元にAAAAAをA*5などに置換する'(_文字列,_繰り返し対象文字,_繰り返し数) :- sub_atom(_文字列,_,_繰り返し数,_,S1,S2,S3,L1,L2,L3), all(L2,_繰り返し対象文字), \+(last(L1,_繰り返し対象文字)), \+(L3 = [_繰り返し対象文字|_]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/743 # # http://ime.nu/から最初の空白までを抽出する正規表現はどうなりますか? # # 'http://ime.nu/から最初の空白までを抽出する'(_文字列,_前文字列,_抽出された文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,_後文字列,[h,t,t,p,:,/,/,i,m,e,'.',n,u,'/'|R2],L2,[' '|_]), \+(member(' ',R2)), atom_chars(_抽出された文字列,R2), concat_atom([S1,'http://ime.nu/'],_前文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/492 # # ●正規表現の使用環境 # vxeditor # # ●検索か置換か? # 置換 # # ●説明 # 「a」という文字を正規表現で検索し、「C:\test\test2」に置換するために、 # # 検索語:[a-z] もしくは \w # 置換語:C:\test\test2 # # と置換したのですが結果は「C:        est        est2」となってしまいます。 # 置換語を「C:\\test\\test2」としてみたら今度は「\test2」となりました。 # # ●対象データ # a # # ●希望する結果 # C:\test\test2 # # お願いします # # 'aという文字をC:\\test\\test2に置換する'(_文字列,_置換文字列) :- sub_atom(_文字列,_,_,_,S1,a,S3,L1,L2,L3), concat_atom([S1,'C:\\test\\test2',S3],_置換文字列). 'aという文字をC:\\test\\test2に置換する'(_文字列,_置換文字列) :- sub_atom(_文字列,_,_,_,S1,a,S3,L1,L2,L3), concat_atom([S1,'C:\\test\\test2'],_置換文字列の一), 'aという文字をC:\\test\\test2に置換する'(S3,_置換文字列のニ), concat_atom([_置換文字列の一,_置換文字列のニ],_置換文字列). 'aという文字をC:\\test\\test2に置換する'(_文字列,_文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/483 # # ●希望する結果 # ;AA    [ac][ad]・・・・・[zw][zx]  [zz];AB[aa][zy]AC[ab]   ←;AAから;ABまでの[aa][zy][ab]を削除 # ;AA  [ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[df]AC[aa][fb]   ←;AAから;ABまでの[df][aa][fb]を削除 # ;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[bc][fh]AC[ge][eg] ←;AAから;ABまでの[bc][fh][ge][eg]を削除 # # この結果。。。ムリだ # # 削除文字列('[aa][zy][ab]'). 削除文字列('[df][aa][fb]'). 削除文字列('[bc][fh][ge][eg]'). ';AAから;ABまでの削除文字列を削除'(_対象文字列,_削除された文字列) :- findall(Chars,( 削除文字列(_削除文字列), atom_chars(_削除文字列,Chars)),LL), ';AAから;ABまでの削除文字列を削除'(_対象文字列,LL,_削除された文字列). ';AAから;ABまでの削除文字列を削除'(_対象文字列,LL,_削除された文字列) :- sub_atom(_対象文字列,_,_,_,S1,S2,S3,L1,[';','A','A'|R2],[';','A','B'|R3]), '削除文字列を削除'(R2,LL,R2_2), atom_chars(S2_2,[';','A','A'|R2_2]), concat_atom([S1,S2_2,S3],_削除された文字列). '削除文字列を削除'([],_,[]) :- !. '削除文字列を削除'(R2,LL,L) :- member(LX,LL), append(LX,LR,R2), '削除文字列を削除'(LR,LL,L),!. '削除文字列を削除'([A|R1],LL,[A|R2]) :- '削除文字列を削除'(R1,LL,R2),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/482 # # どなたかご教授ください・・・ # ●正規表現の使用環境 # EmEditor # # ●検索か置換か? # 置換 # # ●対照データ # ;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[aa][zy]AC[ab] # ;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[df]AC[aa][fb] # ;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[bc][fh]AC[ge][eg] # # ●希望する結果 # ;AA[ac][ad]・・・・・[zw][zx][zz];AB[aa][zy]AC[ab]     ←;AAの後ろから[aa][zy][ab]を削除 # ;AA[ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[df]AC[aa][fb]     ←;AAの後ろから[df][aa][fb]を削除 # ;AA[aa][ab][ac][ad]・・・・・[zw][zx][zy][zz];AB[bc][fh]AC[ge][eg]    ←;AAの後ろから、[bc][fh][ge][eg]を削除 # # すみませんが、よろしくお願いします。 # # ';AAの後ろから削除文字列を削除'(_対象文字列,_削除文字列,_削除された文字列) :- sub_atom(_対象文字列,_,_,_,S1,S2,S3,L1,[';','A','A'|R2],L3), \+(member(';',R2)), concat_atom(R2,_削除文字列), concat_atom([S1,';AA',S3],削除された文字列). ';AAの後ろから削除文字列を削除'(_対象文字列,_削除文字列,_削除された文字列) :- sub_atom(_対象文字列,_,_,_,S1,S2,S3,L1,[';','A','A'|R2],L3), \+(member(';',R2)), concat_atom(R2,_削除文字列), ';AAの後ろから削除文字列を削除'(S3,_削除文字列,_削除された文字列のニ), concat_atom([S1,';AA',_削除された文字列のニ],_削除された文字列). ';AAの後ろから削除文字列を削除'(_対象文字列,_,_対象文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/477 # # どなたかご教授ください・・・ # ●正規表現の使用環境 # EmEditor # # ●検索か置換か? # 検索 # # ●検索対照データ # (abcdefg:;[]あいうえお)) # # ●希望する結果 # (で始まり、途中にいろいろあっても、))で終わる対象データを検索したいです。 # すみませんが、よろしくお願いします。 # # '(で始まり、途中にいろいろあっても、))で終わる対象データを検索する'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), append(['('],L22,[')',')'],L2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/468 # # 「ecv 0000 ef773s 1111 87ed93」と言った数字、文字、スペースが混ざった文字列から # 数字だけのブロック("0000"と"1111")を取り出したい場合のパターンを教えてください。 # # 自分で思いつくのは下記。もっとスマートなやりかたないでしょうか # 1.\s→\r\nに置換 # 2.^(\d+)$→●$1に置換 # 3.^[^●].*$→空白に置換 # 4.●→空白に置換 # # ちなみにサクラエディタです。 # よろしくお願いいたします。 # '数字だけのブロック("0000"と"1111")を取り出したい'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), すべて数字(L2), 'L1が空であるか最後の要素が空白または改行'(L1), 'L3が空であるか最初の要素が空白または改行'(L3). すべて数字([]) :- !. すべて数字([A|R]) :- member(A,['0','1','2','3','4','5','6','7','8','9']), すべて数字(R). 'L1が空であるか最後の要素が空白または改行'([]) :- !. 'L1が空であるか最後の要素が空白または改行'(L1) :- member(A,[' ','\n']), append(_,[A],L1),!. 'L3が空であるか最後の要素が空白または改行'([]) :- !. 'L3が空であるか最初の要素が空白または改行'([A|_]) :- member(A,[' ','\n']),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/455 # # ●正規表現の使用環境 # C# # # ●検索か置換か? # 置換 # # ●説明 # <b></b>で挟まれた文章を抜き出す # # ●対象データ # <table width="100%" border="1" cellspacing="0" cellpadding="10"> # <tr><td><b>ERROR!!<br><br>多重書き込みです。 あと 17秒お待ちください。</b></td></tr> # </table> # # ●希望する結果 # ERROR!!<br><br>多重書き込みです。 あと 17秒お待ちください。 # # ==== # これを実行するのに、 # responseStr = System.Text.RegularExpressions.Regex.Replace( # responseStr, # @"(.|\n)*<b>(?<sentence>.*?)</b>(.|\n)*", # "${sentence}"); # # とやっているのですが、 # 「任意の一文字(改行文字も含む)」 # という表現は(.|\n)が最適なのでしょうか。 # もっとベターなやりかたがあったら教えて下さい。 # # 'で挟まれた文章を抜き出す'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), append([<,b,>|R1],[<,/,b,>],R1), \+(append(_,[<,b,>|_],R1)), \+(append(_,[<,/,b,>|_],R1)), atom_chars(_適合文字列,R1), concat_atom([S1,''],_前文字列), concat_atom(['',S3],_後文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/444 # # よろしくお願いします # # ●正規表現の使用環境 # 秀丸 # # ●検索か置換か? # 置換 # # ●説明 # ダブルクォーテーションの中の文字を空白扱いにしたい # # ●対象データ # test="daikon" # test="daikon ninjin" # test="daikon ninjin tamanegi" # # ●希望する結果 # test="" # test="" # test="" # # 'ダブルクォーテーションの中の文字を空白扱いにしたい'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_置換対象文字列,_,L1,['"'|R2],['"'|R3]), \+(member('"',R2)), atom_chars(_残り文字列,R3), concat_atom([_前文字列,'""',_残り文字列],_置換された文字列). 'ダブルクォーテーションの中の文字を空白扱いにしたい'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_置換対象文字列,_,L1,['"'|R2],['"'|R3]), \+(member('"',R2)), atom_chars(_残り文字列,R3), 'ダブルクォーテーションの中の文字を空白扱いにしたい'(_残り文字列,_置換された文字列のニ), concat_atom([_前文字列,'""',_置換された文字列のニ],_置換された文字列). 'ダブルクォーテーションの中の文字を空白扱いにしたい'(_文字列,_文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/418 # # テキスト中の行頭 ; という記号を置き換えようしています # '^\;'とかいたらマッチしません # # 次に ^\;.* と書いたらマッチするものの # 行頭に;がある行の一列すべてがマッチしてしまいます # # 一体どう書けばよいのでしょうか? # # 'テキスト中の行頭 ; という記号を置き換えようしています'(_文字列,_置換文字列,_置換された文字列) :- atom_chars(_文字列,Chars), atom_chars(_置換文字列,Chars2), 'ならびの行頭位置にある ; という記号を置換'(Chars,Chars2,L), atom_chars(_置換された文字列,Chars3). 'ならびの行頭位置にある ; という記号を置換'([';'|R1],Chars2,L) :- append(Chars2,R1,L),!. 'ならびの行頭位置にある ; という記号を置換'(Chars1,Chars2,L) :- 'ならびの行頭位置にある ; という記号を置換のニ'(Chars1,Chars2,L). 'ならびの行頭位置にある ; という記号を置換のニ'([],_,[]) :- !. 'ならびの行頭位置にある ; という記号を置換のニ'(['\n',';'|R1],Chars2,L) :- 'ならびの行頭位置にある ; という記号を置換のニ'(R1,Chars,R2), append(Chars2,R2,L),!. 'ならびの行頭位置にある ; という記号を置換のニ'([A|R1],Chars2,[A|R2]) :- 'ならびの行頭位置にある ; という記号を置換のニ'(R1,Chars,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/403 # # ●正規表現の使用環境 # Excel VBA # # ●検索か置換か? # 置換 # # ●説明 # <>で囲まれた文字列を空白に置換したい。 # # ●対象データ # あいうえお<ほげほげ>かきくけこ # みかん<りんご<すいか>ぶどう>メロン # # ●希望する結果 # あいうえおかきくけこ # みかんメロン # # --- # 検索:<*> # 置換: # --- # というふうにすると、 # 一番目の例に対してはうまくいくのですが、入れ子になっている場合にうまくいきません。 # ↓のような結果になってしまいます。 # みかんぶどう>メロン # # # お願いします。 # # '<>で囲まれた文字列を空白に置換したい。'(_文字列,_置換された文字列) :- atom_chars(_文字列,Chars), 'ならびの<>で囲まれた部分を空白に置換したい。'(Chars,_置換された文字ならび), atom_chars(_置換された文字列,_置換された文字ならび). 'ならびの<>で囲まれた部分を空白に置換したい。'([],[]). 'ならびの<>で囲まれた部分を空白に置換したい。'([<|R1],L) :- '<>に囲まれた部分を置換する'(R1,L1,R2), 'ならびの<>で囲まれた部分を空白に置換したい。'(R2,L2), append(L1,L2,L),!. 'ならびの<>で囲まれた部分を空白に置換したい。'([A|R1],[A|R2]) :- 'ならびの<>で囲まれた部分を空白に置換したい。'(R1,R2). '<>に囲まれた部分を置換する'([>|R],[],R) :- !. '<>に囲まれた部分を置換する'([<|R1],L,R) :- '<>に囲まれた部分を置換する'(R,L1,R1), '<>に囲まれた部分を置換する'(R1,L2,R), append(L1,L2,L),!. '<>に囲まれた部分を置換する'([A|R1],[A|R2],R) :- '<>に囲まれた部分を置換する'(R1,R2,R),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/381 # # ●正規表現の使用環境 # C# 4.0 # # ●検索か置換か? # 置き換え # # ●説明 # html内の<dd></dd>タグを検索して<dd>と</dd>のみ置き換えたい # ためしに<dd>とだけやってみましたが、<dd>タグは置き換えされませんでした # # ●対象データ # <dd>文章1</dd> # <dd>文章2</dd> # # ●希望する結果 # 文章1 # 文章2 # 'html内の<dd></dd>タグを検索して<dd>と</dd>のみ置き換える'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,[<,d,d,>|R1],L3), append(_[/,<,d,d,>|_],L1), append(L11,[/,<,d,d,>],R1), \+(append(L11,[/,<,d,d,>],L11)), atom_chars(_ddタグを削除された文字列,L11), concat_atom([L1,L11,L2],_置換された文字列). 'html内の<dd></dd>タグを検索して<dd>と</dd>のみ置き換える'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,[<,d,d,>|R1],L3), append(_[/,<,d,d,>|_],L1), append(L11,[/,<,d,d,>],R1), \+(append(L11,[/,<,d,d,>],L11)), 'html内の<dd></dd>タグを検索して<dd>と</dd>のみ置き換える'(L3,_置換された文字列のニ), concat_atom([L1,L11,_置換された文字列のニ],_置換された文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/336 # # http://ime.nu/何が来るかわからない.何が来るかわからない.test.com/何が来るかわからない # http://ime.nu/何が来るかわからない.test.com/何が来るかわからない # # 上の2つともにマッチさせる正規表現は、どのように書くのでしょうか? # 'http://ime.nu/何が来るかわからない.何が来るかわからない.test.com/何が来るかわからない http://ime.nu/何が来るかわからない.test.com/何が来るかわからない の2つともにマッチさせる'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,[]), append([h,t,t,p,:,/,/,i,m,e,'.'n,u,/|R21],['.',t,e,s,t,/|R22],L2), 適合パターン(R21). 適合パターン(L) :- \+(member('.',L)),!. 適合パターン(L) :- append(L0,['.'|R],L), \+(member('.',L0)), \+(member('.',R)). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/297 # # お願いします # # ●正規表現の使用環境 # Hex Editor Neo # # ●検索か置換か? # 検索 # # ●説明 # 1文字目と3文字目が同じで、2文字と目と4文字目が同じの4文字の文字 # # ●対象データ # ABAB # PAPA # 0101 # # # '1文字目と3文字目が同じで、2文字と目と4文字目が同じの4文字の文字'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,_,[A,B,A,B],_), \+(A=B). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/293 # # ●正規表現の使用環境 # LINUX grepコマンド # # ●検索か置換か? # 検索 # # ●説明 # ドットで行に一文字追加されたもののみ検索したい # # ●対象データ # ABC # ABCD # ABCDE # # ●希望する結果 # ABCD # # grep ABC. sample.txtとしても # 結果 2文字追加されているABCDEまで出てきてしまいます。。。 # ドットは一文字と習ったのですが、 # なぜなのかわかりません・・。 # # ドットで行に一文字追加されたもののみ検索したい(_検索文字,_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,_,L2,['\n'|_]), atom_chars(_検索文字,L), append(L,[_],L2), \+(member('\n',L)). ドットで行に一文字追加されたもののみ検索したい(_検索文字,_文字列,_前文字列,_適合文字列,_後文字列). sub_atom(_文字列,_,_,_,_,_,_後文字列のニ,_,L2,['\n'|_]), atom_chars(_検索文字,L), append(L,[_],L2), \+(member('\n',L)), ドットで行に一文字追加されたもののみ検索したい(_検索文字,_後文字列のニ,_前文字列,_適合文字列,_後文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/290 # # ●正規表現の使用環境 # Emacs Lisp # # ●検索か置換か? # 検索 # # ●説明 # C++などでよく使われる構文にマッチさせたい。 # 具体的にはクラスインスタンスへのアクセスアローやドットにマッチさせたい。 # # ●対象データ # # class A; # A a; # A* a_ref = &a; # # a.m_hoge; # a->m_hoge; # # ●希望する結果 # これにマッチさせる場合 # "\\(?:\\.\\|->\\)\\(\\(?:[a-zA-Z0-9][_a-zA-Z0-9]*\\)?\\)\\=" # が正解らしいですが # なぜ正解かわからない部分があるので教えてください。 # まず"?"演算子の使い方ですが・・・直前の文字列(空文字込み)にマッチさせるために置いてあるとして # 直後の ":"が理解不能です。 # 後半でも、":"が出てきますがこれも不可解。名前空間の"::"などにマッチさせたいのであれば # ::や:?:とかならわかるのですが・・ # 'クラスインスタンスへのアクセスアローやドットにマッチさせる'(_クラス,_文字列,_前文字列,_適合文字列,_後文字列) :- atom_chars(_クラス,CharsL), sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), \+((last(L1,C),アルファベット(C))), last(L2,';'), アローやドットにマッチさせる(ClassL,R2,L2). 'クラスインスタンスへのアクセスアローやドットにマッチさせる'(_クラス,_文字列,_前文字列,_適合文字列,_後文字列) :- atom_chars(_クラス,CharsL), sub_atom(_文字列,_,_,_,_,_,_後文字列2,L1,L2,L3), \+((last(L1,C),アルファベット(C))), last(L2,';'), アローやドットにマッチさせる(ClassL,R2,L2), 'クラスインスタンスへのアクセスアローやドットにマッチさせる'(_クラス,_後文字列2,_前文字列,_適合文字列,_後文字列). アローやドットにマッチさせる(ClassL,R2,L2) :- append(ClassL,[-,>|R2],L2), 全てアルファベット(R2). アローやドットにマッチさせる(ClassL,R2,L2) :- append(ClassL,['.'|R2],L2), 全てアルファベット(R2). アルファベット(C) :- C @>= a, C @=< z,!. アルファベット(C) :- C @>= 'A', C @=< 'Z',!. アルファベット(C) :- C @>= '0', C @=< '9',!. 全てアルファベット([]). 全てアルファベット([C|R]) :- アルファベット(C), 全てアルファベット(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/282 # # ○ds # ○nds # ○gameds # ○gamends # ×legends # 検索したときに、○だけヒットさせるにはどうすればいいか教えてください # # dsで終わる文字列でleからはじまらないもの(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), append(L0,[d,s],L2), \+(append(_,[d,s|_],L2)), \+(append([l,e],_,L0)). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1312201995/111 # # # [1] 授業単元: プログラミング演習(発展課題) # [2] # 下の配列から"CGUU"をギャップ("-")を含んでいても検出できる正規表現を作成せよ。 # # CCAGCUCCC-G---U--UGGG # '文字列から"CGUU"をギャップ("-")を含んでいても検出する'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), '"CGUU"をギャップ("-")を含んでいても'(['C','G','U','U'],L2). '文字列から"CGUU"をギャップ("-")を含んでいても検出する'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,_,L2,_), '"CGUU"をギャップ("-")を含んでいても'(['C','G','U','U'],L2), '文字列から"CGUU"をギャップ("-")を含んでいても検出する'(S3,_前文字列2,_適合文字列,_後文字列), concat_atom([S1,S2,_前文字列2],_前文字列). '"CGUU"をギャップ("-")を含んでいても'([],_) :- !. '"CGUU"をギャップ("-")を含んでいても'([A|R1],[A|R2]) :- '"CGUU"をギャップ("-")を含んでいても'(R1,R2). '"CGUU"をギャップ("-")を含んでいても'([A|R1],[-|R2]) :- '"CGUU"をギャップ("-")を含んでいても'(R1,R2). '"CGUU"をギャップ("-")を含んでいても'([A|R1],[B|R2]) :- \+(A=B),!,fail. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/279 # # ●正規表現の使用環境 # C# 4.0 # # ●検索か置換か? # 置換です # # ●説明 # HTMLファイルのソースコードの # <script type="text/javascript">〜省略〜</script> # scriptタグ開始を含めてscriptタグ終了タグまでを消去したいんです # # ●対象データ # <script type="text/javascript"> # <!-- # // 〜コメント〜 # 内容 # // --> # </script> # # <script type="text/javascript" src="script.js"></script> # # 上記のどちらも以下のものでやったのですが、どうもヒットしません # <script\s[a-zA-Z0-9<>()-\.!_~*,;/:@&=+$,%#'""]+>[a-zA-Z0-9<>()-\.!_~*,;/:@&=+$,%#]+\</script> # # 解答よろしくお願いします # # 'scriptタグ開始を含めてscriptタグ終了タグまでを消去'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), L2 = [<,s,c,r,i,p,t,' '|R2], append(R20,[/,s,c,r,i,p,t,>],R2), \+(append(_,[<,s,c,r,i,p,t,' '|_],R20)), \+(append(_,[/,s,c,r,i,p,t,>|_],R20)), 'scriptタグ開始を含めてscriptタグ終了タグまでを消去'(S3,_置換された文字列2), concat_atom([S1,_置換された文字列2],_置換された文字列),!. 'scriptタグ開始を含めてscriptタグ終了タグまでを消去'(_文字列,_文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/266 # # ●正規表現の使用環境 # PHP 5.2.5 # # ●検索か置換か? # 置換 # # ●説明 # <a>でリンクされていないURLだけをリンクしたい # # ●対象データ # <a href='http://ime.nu/aaaaaa/aaa'>http://aaaaaa/aaa</a> # <a href='http://ime.nu/aaaaaa/aaa'>bbb</a> # http://ime.nu/aaaaaa/aaa # http://ime.nu/aaaaaa/aaa # # (httpの前に改行は無いです) # # ●希望する結果 # # <a href="http://ime.nu/aaaaaa/aaa">http://ime.nu/aaaaaa/aaa</a> # <a href="http://ime.nu/aaaaaa/aaa">bbb</a> # <a href="http://ime.nu/aaaaaa/aaa">http://ime.nu/aaaaaa/aaa</a> # <a href="http://ime.nu/aaaaaa/aaa">http://ime.nu/aaaaaa/aaa</a> # # # ↓これではダメでした。。 # /((?![\"\'>])(https?:\/\/[-_.!~*'()a-zA-Z0-9;\/?:\@&=+\$,%#]+)(?![\"\'<]))/ # 'AタグでリンクされていないURLだけをリンクしたい'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), L1 = [<,a,>|R1], append(R0,[<,/,a,>],R1), \+(append(_,[<,a,>|_],R0)), \+(append(_,[<,/,a,>|_],R0)), 'AタグでリンクされていないURLだけをリンクしたい'(S3,_置換された文字列のニ), concat_atom([S1,S2,_置換された文字列のニ],_置換された文字列),!. 'AタグでリンクされていないURLだけをリンクしたい'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), L1 = [h,t,t,p,:,/,/|R1], member(C,R1), \+(member(C,[' ',',','\n'])), concat_atom([S1,'',S2,'\n'],S4), concat_atom([S4,_置換された文字列のニ],_置換された文字列),!. 'AタグでリンクされていないURLだけをリンクしたい'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), L1 = [h,t,t,p,:,/,/|R1], last(R1,C), member(C,[' ',',','\n']), concat_atom([S1,'',S2,'\n'],S4), 'AタグでリンクされていないURLだけをリンクしたい'(S3,_置換された文字列のニ), concat_atom([S4,_置換された文字列のニ],_置換された文字列),!. 'AタグでリンクされていないURLだけをリンクしたい'(_文字列,_文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/256 # # よろしくお願いします。 # ●正規表現の使用環境 # Ruby # ●検索か置換か? # 検索 # ●説明 # 株価のみを抜出し、DBに入れていく予定でいます。 # ●対象データ # http://ime.nu/stocks.finance.yahoo.co.jp/stocks/history/?code=9984.T # のソースから # # ●希望する結果 # 2011年6月30日 # 3,010 # 3,050 # 2,986 # 3,030 # 8,376,600 # 3,030 # . # . # . # 日付、始値、高値、安値、終値、出来高、調整後終値 # です。 # http://ime.nu/stocks.finance.yahoo.co.jp/stocks/history/?code=9984.T # . # . # . # <td>2011年6月30日</td> # <td>3,010</td> # <td>3,050</td> # <td>2,986</td> # <td>3,030</td> # <td>8,376,600</td> # <td>3,030</td> # . # . # このページのソースから正規表現で、下記のように日付と株価の部分だけ抜き出すにはどうしたらよいでしょうか? # 2011年6月30日 # 3,010 # 3,050 # 2,986 # 3,030 # 8,376,600 # 3,030 # . # . # . # . # # 言語はRubyで、([^<>]+)などで色々やってみましたが、どうにもうまく抜き出せません。 # また、webのHTMLから、正規表現である程度特定して文字列を抜き出し、 # その特定して抜き出した文字列に再度正規表現で、文字列を特定していくという # 方法は可能でしょうか? # よろしくお願いします。 # 'ページのソースから正規表現で、下記のように日付と株価の部分だけ抜き出す'(WebURL,_日付か株価) :- get_lines(WebURL,Lines), 日付と株価行を絞り込む(Lines,Lines2), 絞り込んだ日付と株価行からデータ部分を切り取る(Lines2,_日付か株価). 日付と株価行を絞り込む(Lines,Lines2) :- 日付と株価tableタグを捜す(Lines,R1), 日付と株価行のみ選別(R1,Lines2). 日付と株価tableタグを捜す(Lines,R1) :- append(_,[Line1|R1],Lines), sub_atom(Lines,0,7,_,'

'),!,fail;true)), Lines2),!. 絞り込んだ日付と株価行からデータ部分を切り取る(Lines2,_日付か株価) :- append(_,[Line2|_],Lines2), sub_atom(Line2,0,4,_,'','',''|R2],L), append(L02,[''|R22],R2), append(L03,[''|R3],R22), append(L04,[''|R4],R3). concat_atom(L03,_タグの値), append(L01,[''|L02],L3), append(L3,[''],L4), concat_atom(L4,_前文字列), concat_atom([''|R3],_後文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/102 # # VB.NETで正規表現を書いています。 # 条件としては、「A0123」のように、先頭がアルファベットのAでその他が数字4桁という正規表現と、 # 「01234」のような数字5桁という二種類のどちらかにマッチする正規表現を作っています。 # 正規表現は苦手で困っています。 # どなたかご教授下さい。 # よろしくお願いします。 # '「A0123」のように、先頭がアルファベットのAでその他が数字4桁か「01234」のような数字5桁という二種類のどちらか'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,St,5,R,_前文字列,_適合文字列,_後文字列,L1,L2,L3), L2=['A'|R1]), すべてが数字(R2). '「A0123」のように、先頭がアルファベットのAでその他が数字4桁か「01234」のような数字5桁という二種類のどちらか'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,St,5,R,_前文字列,_適合文字列,_後文字列,L1,L2,L3), すべてが数字(L2). すべてが数字([]) :- !. すべてが数字([A|R]) :- append(_,[A|_],['0','1','2','3','4','5','6','7','8','9']), すべてが数字(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/92 # # IPを正規表現でチェックしたいのですが # 210.000.111.1〜210.000.111.255 # 215.100.000.1〜215.100.000.255 # の2つに当てはまる場合、TRUE(int1)をかえすにはどうすればいいでしょうか? # 以下のようにやってみたのですが他のIPでもint(1)がかえってきます。 # # preg_match('/^210\.000\.111\.([0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$ || ^215\.100\.000\.([0-9]{2}|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/', $_SERVER['REMOTE_ADDR']) # # 'IPが210.000.111.1〜210.000.111.255 か 215.100.000.1〜215.100.000.255 の範囲にある'(IP) :- split(IP,['.'],[210,0,111,D]), D >= 1, D =< 255,!. 'IPが210.000.111.1〜210.000.111.255 か 215.100.000.1〜215.100.000.255 の範囲にある'(IP) :- split(IP,['.'],[215,100,0,D]), D >= 1, D =< 255,!. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 'IPがある範囲にあるか'(IPの文字列表現,IPの範囲表現) :- split(IPの文字列表現,[U1,U2,U3,U4]), split(IPの範囲表現,['~'],[IP1,IP2]), split(IP1,['.'],[A1,A2,A3,A4]), split(IP2,['.'],[B1,B2,B3,B4]), U1 >= A1,U1 =< B1, U2 >= A2,U2 =< B2, U3 >= A3,U3 =< B3, U4 >= A4,U4 =< B4,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/86 # # php4.3.11です # --------------------------------- # $str = <<< DOC_END # あああああ # いいいいい # <html_start> # ううううう # えええええ # <html_end> # おおおおお # DOC_END; # # $pattern = "/<html_start>(.*)<html_end>/"; # $replacement = 'aaaabbbb'; # # $res = preg_replace($pattern, $replacement, $str); # print_r($res); # --------------------------------- # と出力してみましたが何も表示されませんでした。 # ホントは「あああああいいいいいaaaabbbbおおおおお」と出て欲しかったのですが…。 # 最終的には<html_start><html_end>で囲まれた範囲に # PHPのhtmlspecialchars()やnl2br()関数を適用して出力したいです。 # 'あああああ\nいいいいい\n\nううううう\nえええええ\n\n\nおおおおお\n を あああああいいいいいaaaabbbbおおおおお に置換する'(_置換された文字列) :- split(''あああああ\nいいいいい\n\nううううう\nえええええ\n\n\nおおおおお\n',['\n'],L), append(L0,[''|R1],[''|R2],L), append(L0,[aaaabbb|R2],L2), concat_atom(L2,_置換された文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/71 # # php5です。ファイルのフルパスをディレクトリ,ファイル名,拡張子に分割してその配列を返したくてこう書きました。 # # $pattern1 = '`^(.*)(?:[/\\\](.*)){1}$`'; # preg_match($pattern1, $fullpath, $match1); # $pos = strpos($match1[2], '.'); # if($pos === false){ # return array($match1[1], $match1[2]); # }else{ # $pattern2='`^(.*?)\.(.*)$`'; # preg_match($pattern2, $match1[2], $match2); # return array($match1[1], $match2[1], $match2[2]); # } # # 必ず拡張子があるなら一度のpreg_matchでキャプチャ出来たのですが # 拡張子無しファイル混じりだった場合の正規表現がうまく思いつかずに二段階(三段階?)になってしまいました # でもpreg_matchやってその中で'.'探して、あったらさらにpreg_matchというのはまわりくどいように思います # # この処理を一度にこなす正規表現の考え方のヒントをください # # 'ファイルのフルパスをディレクトリ,ファイル名,拡張子に分割'(_ファイル名,_ディレクトリ,_ファイル名,_拡張子) :- sPLIT(_ファイル名,['/','.'],L), append(L0,[_ファイル,'.',_拡張子],L), concat_atom(L0,_ディレクトリ),!. 'ファイルのフルパスをディレクトリ,ファイル名,拡張子に分割'(_ファイル名,_ディレクトリ,_ファイル名,''). sPLIT(_ファイル名,['/','.'],L), append(L0,[_ファイル],L), concat_atom(L0,_ディレクトリ),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/63 # # <html> # <head> # <title>テスト</title> # </head> # <body> # <!-- ここから --> # あああああああああああ<br /> # あああああああああああ<br /> # あああああああああああ<br /> # あああああああああああ<br /> # あああああああああああ # <!-- ここまで --> # </body> # </html> # # このようなhtmlをPHP5のfile_get_contentsで読み込んで # <!-- ここから -->〜<!-- ここまで -->を取得したいのですが # どうすれば良いですか? # # "/<!-- ここから -->(.*)<!-- ここまで -->/" # で読めませんでした # # 'このようなhtmlをPHP5のfile_get_contentsで読み込んで<!-- ここから -->〜<!-- ここまで -->を取得したい'(_html,_ここから_ここまで) :- get_chars(_html,Chars), append(_,[<,!,-,-,' ',こ,こ,か,ら,' ',-,-,>]|R1],[<,!,-,-,' ',こ,こ,ま,で,' ',-,-,>]|R2],Chars), concat_atom(R1,_ここから_ここまで). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/38 # # /tatakanamk/ # と言う文字列があって/から/までの検出をするにはどう書けばよいでしょうか? # /と/も含めて12文字を検出したいのです。 # 超初歩的ですがよろしくお願いします。 # # % http://nojiriko.asia/prolog/t264_u.html '/tatakanamk/ と言う文字列があって/から/までの検出をする'(_文字列,_前文字列,'/tatakanamk/',_後文字列) :- sub_atom(_文字列,0,12,_,_前文字列,'/tatakanamk/',_後文字列,_,_,_). % 以下のサイトは # ABCと続く場合を除くABという文字列をCDに置換したい場合は # どのように書いたらよいでしょうか・・・ 'ABCと続く場合を除くABという文字列をCDに置換'(_文字列,_置換された文字列) :- sub_atom(_文字列,S,2,R,'AB'), \+(sub_atom(_文字列,S+2,1,_,'C')), sub_atom(_文字列,0,S,_,_前文字列), sub_atom(_文字列,S+2,R,0,_後文字列), concat_atom([_前文字列,'CD',_後文字列],_置換された文字列). 'ABCと続く場合を除くABという文字列をCDに置換'(_文字列,_置換された文字列) :- sub_atom(_文字列,S,2,R,'AB'), \+(sub_atom(_文字列,S+2,1,_,'C')), sub_atom(_文字列,0,S,_,_前文字列), sub_atom(_文字列,S+2,R,0,_後文字列), 'ABCと続く場合を除くABという文字列をCDに置換'(_後文字列,_置換された後文字列), concat_atom([_前文字列,'CD',_置換された後文字列],_置換された文字列). 'ABCと続く場合を除くABという文字列をCDに置換'(_文字列,_文字列). %%%% 参考 検索の例 http://nojiriko.asia/prolog/seikihyogendoujou_30.html %%%% 'ABCと続く場合を除くABという文字列'(_文字列,_前文字列,'AB',_後文字列) :- sub_atom(_文字列,S,2,R,'AB'), \+(sub_atom(_文字列,S+2,1,_,'C')), sub_atom(_文字列,0,S,_,_前文字列), sub_atom(_文字列,S+2,R,0,_後文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/30 # # ABCと続く場合を除くABという文字列を指定したい場合は # どのように書いたらよいでしょうか・・・ 'ABCと続く場合を除くABという文字列'(_文字列,_前文字列,'AB',_後文字列) :- sub_atom(_文字列,S,2,R,'AB'), \+(sub_atom(_文字列,S+2,1,_,'C')), sub_atom(_文字列,0,S,_,_前文字列), sub_atom(_文字列,S+2,R,0,_後文字列). % 以下のサイトは # 検索したい字句が存在してもしなくても # マッチさせるにはどうしたらいいのでしょうか? # # おいしい料理1料理の解説1 # 料理の解説2 # # っというタグがあってこれから # # 1行目では、 #  \1 → オムレツ.jpg #  \2 → おいしい料理 #  \3 → 料理の解説1 # 2行目では #  \1 → カツ丼.jpg #  \2 → #  \3 → 料理の解説2 # # というようにしたいのです。 # src="(.*?)".*?alt="(.*?)".*?(.*?) # ↑のような正規表現を考えたのですが # これを2行目にも正しくマッチできるように # 修正していただけませんか? '検索したい字句が存在してもしなくてもマッチさせる'(_文字列,[Atom1,Atom2,Atom3]) :- atom_chars(_文字列,Chars), 'src='(Chars,Atom1,Chars1), 'alt='(Chars1,Atom2,Chars2), ''(Chars2,Atom3,Chars3). 'src='(Chars,Atom,R2) :- append(_,[s,r,c,=,"|R1],['"'|R2],Chars), concat_atom(R1,Atom),!. 'src='(Chars,'',Chars) :- !. 'alt='(Chars,Atom,R2) :- append(_,[a,l,t,=,"|R1],['"'|R2],Chars), concat_atom(R1,Atom),!. 'alt='(Chars,'',Chars) :- !. ''(Chars,Atom,R2) :- append(_,[<,b,>|R1],[<,/,b,>|R2],Chars), concat_atom(R5,Atom),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/467 # # ●正規表現の使用環境 # .net(C#3.0) # # ●検索か置換か? # 検索 # # ●説明 # 空白をデリミタとして、最初の文字列を取得したい # 空白は半角全角両方あり、複数連続することもあり得る # ただし、()や[]で囲まれる文字列はスルー(空白として処理する) # 正規表現一発で抜き出したいです # # 下記例の各行は全て「山田太郎」だけ抽出されるようにしたいです # # 山田太郎 39才 #  山田太郎 39才 # (A社) 山田太郎 39才 # (A社)山田太郎  39才 # (A社 B課)山田太郎 39才 # 山田太郎(A社)39才 '空白をデリミタとして、最初の文字列を取得したい。空白は半角全角両方あり、複数連続することもあり得るただし、()や[]で囲まれる文字列はスルー(空白として処理する)'(_文字列,_最初の文字列) :- split(_文字列,[' ',' ','(',')','[',']'],L1), '空白をデリミタとして、最初の文字列を取得したい。'(L1,_最初の文字列). '空白をデリミタとして、最初の文字列を取得したい。'(L1,Atom) :- '()や[]で囲まれる文字列はスルー(空白として処理する)'(L1,L2), '空白をデリミタとして、最初の文字列を取得したい。'(L2,Atom),!. '空白をデリミタとして、最初の文字列を取得したい。'(L1,Atom) :- 空白は半角全角両方あり、複数連続することもあり得る(L1,L2), '空白をデリミタとして、最初の文字列を取得したい。'(L2,Atom),!. '空白をデリミタとして、最初の文字列を取得したい。'([A|_],Atom). '()や[]で囲まれる文字列はスルー(空白として処理する)'(L1,L2) :- append(L0,['('|R1],[')'|R2],L1), append(L0,[' '|R2],L2),!. '()や[]で囲まれる文字列はスルー(空白として処理する)'(L1,L2) :- append(L0,['['|R1],[']'|R2],L1), append(L0,[' '|R2],L2),!. 空白は半角全角両方あり、複数連続することもあり得る([],[]) :- !. 空白は半角全角両方あり、複数連続することもあり得る([' '|R1],R2) :- 空白は半角全角両方あり、複数連続することもあり得る(R1,R2),!. 空白は半角全角両方あり、複数連続することもあり得る([' '|R1],R2) :- 空白は半角全角両方あり、複数連続することもあり得る(R1,R2),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/437 # # 使用言語はjavascript。 # 独自のタグ(<A#...#A>)が設定されたテキスト行から、このタグを取り除きたい。 # テキスト行中にタグが複数出てくることもあり。 # # 置換前 : あいうえお <A#かきくけこ#A> さしすせそ <A#たちつてと#A> なにぬねの # # 置換後 : あいうえお さしすせそ なにぬねの # # # どうやったらいいですかあああああボスケテーーー!!! # '独自のタグ(<A#...#A>)が設定されたテキスト行から、このタグを取り除きたい。'(_文字列,_独自のタグを取り除いた文字列) :- atom_chars(_文字列,Chars), append(L0,['<','A','#'|R1],['#','A','>'|R2],Chars), append(L0,R2,L2), concat_atom(L2,_独自のタグを取り除いた文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/417 # # ●正規表現の使用環境 # 秀丸 8.0.2 b5 # # ●検索か置換か? # 検索 # # ●説明 # 条件にマッチする行を指定数だけ抽出する # # ●対象データ # a hogehoge1 # b hogehoge2 # c hogehoge3 # a hogehoge4 # a hogehoge5 # c hogehoge6 # a hogehoge7 # b hogehoge8 # # ●希望する結果 # "a " で始まる行を 3 つだけ表示させる # a hogehoge1 # a hogehoge4 # a hogehoge5 # # 宜しくお願いします。 # % % 3つだけと言う場合、3つ未満だった時どうするか。failにするなら2引数の方の第一節を削除する。 % '"a " で始まる行を 3 つだけ表示させる'(Lines) :- '"a " で始まる行を 3 つだけ表示させる'([_,_,_],Lines). '"a " で始まる行を 3 つだけ表示させる'(_,[]) :- !. '"a " で始まる行を 3 つだけ表示させる'([],_) :- !. '"a " で始まる行を 3 つだけ表示させる'([_|Ln],[Line|R]) :- sub_atom(Line,0,_,_,'a '), write_fromatted('%t\n',[Line]), '"a " で始まる行を 3 つだけ表示させる'(Ln,R),!. '"a " で始まる行を 3 つだけ表示させる'(Ln,[_|R]) :- '"a " で始まる行を 3 つだけ表示させる'(Ln,R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/385 # # ●正規表現の使用環境 # .net Framework 2.0 - 3.5 (C#) # # ●検索か置換か? # 検索 # # ●説明 # artist, titleの各グループの文字列を取得したい # # ●対象データ # Artist - Title # # ●希望する結果 # artist = Artist # title = Title # # よろしくおねがいします。 # 'artist, titleの各グループの文字列を取得したい'(_対象データ,_希望する結果) :- split(_対象データ,[' '],L), 'artist, titleの切り出し'(L,Artist,Title), write_formatted_atom(_希望する結果,'artist = %t\ntitle = %t',[Artist,Title]). 'artist, titleの切り出し'([Artist,Title],Artist,Title) :- !. 'artist, titleの切り出し'([Artist,_,Title|_],Artist,Title) :- !. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/332 # # ●環境 # vb.net # # ●したいこと # 3文字以上の繰り返し表現を抽出 # # ●サンプル # 例文1)死にたい死にたい死にたい死にたい死にたい # 結果1)死にたい # # ●したいこと # 2箇所以上出現する3文字以上の文字列 # # 例文2)筋肉バスターと阿修羅バスター # 結果2)バスター # # # ってのを正規表現でやるのは無理でしょうか・・・ # '重複しない3文字以上の繰り返し表現を抽出'(_文字列,_重複しない3文字以上の繰り返し表現ならび) :- findsetof(_3文字以上の繰り返し表現,( '3文字以上の繰り返し表現を抽出'(_文字列,_3文字以上の繰り返し表現), _重複しない3文字以上の繰り返し表現ならび). '3文字以上の繰り返し表現を抽出'(_文字列,_3文字以上の繰り返し表現) :- sub_atom(_文字列,_開始点,_長さ,_残り長さ,[_3文字以上の繰り返し表現|R]), _長さ >= 3, _開始点2 is _開始点 + _長さ, sub_atom(_文字列,_開始点2,_長さ,_残り長さ2,_3文字以上の繰り返し表現). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/316 # # ●正規表現の使用環境 # PHP5 # # ●検索か置換か? # 検索 # # ●説明 # [[ と ]] に囲まれた文字列を配列で取得したい # # ●対象データ # [[hare]][[ame]][[kumori]][[yuki]][[]][[kaminari]][[taifuu]] # # ●希望する結果 # matches[0] = hare # matches[1] = ame # matches[2] = kumori # matches[3] = yuki # matches[4] = # matches[5] = kaminari # matches[6] = taifuu # # よろしくお願いします。 # '[[ と ]] に囲まれた文字列をならびとして取得したい'(_文字列,L) :- atom_chars(_文字列,Chars), '文字ならびから[[ と ]] に囲まれた文字列をならびとして取得したい'(Chars,L). '文字ならびから[[ と ]] に囲まれた文字列をならびとして取得したい'(Chars,[_文字列1|R]) :- append(L0,['[','['|R1],[']',']'|R2],Chars), concat_atom(R1,_文字列1), '文字ならびから[[ と ]] に囲まれた文字列をならびとして取得したい'(R2,R),!. '文字ならびから[[ と ]] に囲まれた文字列をならびとして取得したい'(_,[]) :- !. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/731 # # すみません、後ひとつ聞きたいんですが # # 2桁以上の整数を、すべて+1する置き換えかたはありますか? # 5 # 50 # 100 # 134 # 1295 # ↓ # 5 # 51 # 101 # 135 # 1296 # って感じです # よろしくお願いします。 # # f(X,Y) :- X > 10,Y is X + 1,!. f(X,X). '2桁以上の整数を、すべて+1する置き換え'(_文字列,_置き換えられた文字列) :- 文字列の中の数値列を選別して関数を適用する(_文字列,_置き換えられた文字列). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 文字列の中の数値列を選別して関数を適用する(_文字列,_適用後の文字列) :- sPLIT(_文字列,['0','1','2','3','4','5','6','7','8','9'],L1), 一文字の数字または数字ならびを数値にまとめる(L1,L2), 数値要素のみに関数を適用(L2,L3), concat_atom(L3,_適用後の文字列). 一文字の数字または数字ならびを数値にまとめる([],[]) :- !. 一文字の数字または数字ならびを数値にまとめる(L1,[_数値|R2]) :- 数字以外に出会うまで(L1,_数値,R), 一文字の数字または数字ならびを数値にまとめる(R1,R2),!. 一文字の数字または数字ならびを数値にまとめる([A|R1],[A|R2]) :- 一文字の数字または数字ならびを数値にまとめる(R1,R2). 数字以外に出会うまで(L1,_数値,R) :- append(L0,[A|_],L1), \+(append(_,[A|_],['0','1','2','3','4','5','6','7','8','9'])), concat_atom(L0,_数値アトム), atom_to_term(_数値アトム,_数値,_),!. 数字以外に出会うまで(L1,L1,[]). 数値要素のみに関数を適用([],[]) :- !. 数値要素のみに関数を適用([A|R1],[B|R2]) :- number(A), f(A,B), 数値要素のみに関数を適用(R1,R2),!. 数値要素のみに関数を適用([A|R1],[A|R2]) :- \+(number(A)), 数値要素のみに関数を適用(R1,R2). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% numbers(['0','1','2','3','4','5','6','7','8','9']). '2桁以上の整数を、すべて+1する置き換え'(_文字列,_置き換えられた文字列) :- numbers(Numbers), 'sPLIT'(_文字列,Numbers,L1), '2桁以上の整数を、すべて+1する置き換え'(L1,Numbers,L2), concat_atom(L2,_置き換えられた文字列). '2桁以上の整数を、すべて+1する置き換え'([A|R1],Numbers,[A|R2]) :- \+(member(A,Numbers)), '2桁以上の整数を、すべて+1する置き換え'(R1,Numbers,R2). '2桁以上の整数を、すべて+1する置き換え'(L1,Numbers,[S|R3]) :- '数値文字ならびの切り取り'(L1,Numbers,L4,R), concat_atom(L4,A), atom_to_term(A,N), N2 is N + 1, write_formatted_atom(S,'%02d',[N2]), '2桁以上の整数を、すべて+1する置き換え'(R,Numbers,R3). 数値文字ならびの切り取り([],Numbers,[],[]) :- !. 数値文字ならびの切り取り([A|R],Numbers,[],[A|R]) :- \+(member(A,Numbers)),!. 数値文字ならびの切り取り([A|R1],Numbers,[A|R2],R3) :- 数値文字ならびの切り取り(R1,Numbers,R2,R3). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/724 # # 2回以上続く改行だけ検索したいのですが、どうやっても1回のみの改行も検索してしまいます。 # \r\nを2回ってだけではだめなようで、解決策はありますか? # # '2回以上続く改行だけ検索したい'(_文字列,_検索語より前の文字列,_検索語,_検索語より後の文字列) :- atom_chars(_文字列,Chars), append(L0,['\n'|R],Chars), append(L1,R1,R), \+(R1=['\n'|_]), all(L1,'\n'), concat_atom(L0,_検索語より前の文字列), concat_atom(L1,_検索語), concat_atom(R1,_検索語より後の文字列). '2回以上続く改行だけ検索したい'(_文字列,_検索語より前の文字列,_検索語,_検索語より後の文字列) :- atom_chars(_文字列,Chars), append(L0,['\n'|R],Chars), append(L1,R1,R), \+(R1=['\n'|_]), all(L1,'\n'), concat_atom(L0,_), concat_atom(L1,_), concat_atom(R1,_検索語より後の文字列_1), '2回以上続く改行だけ検索したい'(_検索語より後の文字列_1,_検索語より前の文字列,_検索語,_検索語より後の文字列). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '2回以上続く改行だけ検索したい'(Lines,L0,[A|L1],R) :- append(L00,L1,R,Lines), all(L1,''), \+(R=[''|_]), append(L0,[A],L00). '2回以上続く改行だけ検索したい'(Lines,L0,L1,L2) :- append(L00_1,L1_1,R_1,Lines), all(L1_1,''), \+(R_1=[''|_]), append(L0_1,[Line],L00_1), '2回以上続く改行だけ検索したい'(R,L0,L1,L2). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '2回以上続く改行だけ検索したい'(Chars,L0,['\n','\n'],R) :- append(L0,L1,L2,Chars), \+(last(L0,'\n')), \+(list_nth(1,L2,'\n')). '2回以上続く改行だけ検索したい'(Chars,L0,L1,L2) :- append(L00,L11,L22,Chars), all(L11,'\n'), \+(last(L00,'\n')), \+(list_nth(1,L22,'\n')), '2回以上続く改行だけ検索したい'(L22,L0,L1,L2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/703 # # 撮影した写真に付けた名前を一括変更しようと思い、 # 正規表現を扱えるFlexible Renamerを用いて色々と試しているのですが、いまいち行いたいことが出来ません。 # ファイルに付いている一定の法則でついている共通したタグを、ファイル名の末尾に"移動"させたいのです。 # 例: [2010-12-13] [IN] AABBCC.nef -> [IN] AABBCC [2010-12-13].nef # 検索では \[20..-..-..] と打つことで指定することができたのですが、移動の仕方が検索しても見つかりません… # # 正規表現では"移動"を行うことは出来ないのでしょうか? # どうかご教示お願いします! # 'ファイル名に付いている一定の法則でついている共通したタグを、ファイル名の末尾に"移動"させたい'(_ファイル名,_タグを末尾に移動したファイル名) :- sPLIT(_ファイル名,['[',']','.','-'],L), append(L0,['[',A,-,B,-,C,']'|R],L), sub_atom(A,0,2,_,'20'), append(R0,['.'|R1],R), append(L0,['[',A,-,B,-,C,']'|R0],[.|R1],L), concat_atom(L,_タグを末尾に移動したファイル名),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/678 # # ●正規表現の使用環境 # Devas(ディレクトリ内の再帰検索及び置換ソフトでGrep互換) # # ●検索か置換か? # 検索と置換 # # ●説明 # HTMLのaタグにonclick属性を追加,または追記したい # # ●対象データ # 数百のSmartyテンプレート # (HTMLやフレームワークのコードを含む文字列) # 単純に<a hrefで始まるものばかりではなく,<a class等で始まるものもある # # ●希望する結果 # htmlのaタグから # href="xxxxx-regist"を含んでおり, # かつonclick="xxx"含んでいる または 含んでいないものを検索,置換し # onclickにアクションを追加または追記 # # <a href="xxx-regist" onclick="追加または追記したい"> # # # # 対象ページが数百もあり,とても手作業で修正できないため正規表現の力を借りたいです # aタグはすぐにhrefで始まるものばかりではないため,以下のような正規表現を考えたのですが, # なぜか複数行に渡ってしまう結果が抽出されたりとうまくいきません # # href=".+\-regist".+?(onclick="(.+)")?.+?\n # # # ご教授いただけないでしょうか・・ # # 数百のSmartyテンプレートのonclickタグを追加または変更する(_ファイル名ならび) :- append(_,[_ファイル|R],_ファイル名ならび), 'htmlのaタグからhref="xxxxx-regist"を含んでおり,かつonclick="xxx"含んでいる。または含んでいないものを検索,置換しonclickにアクションを追加または追記'(_ファイル), R = [],!. 'htmlのaタグからhref="xxxxx-regist"を含んでおり,かつonclick="xxx"含んでいる。または含んでいないものを検索,置換しonclickにアクションを追加または追記'(_ファイル) :- get_chars(_ファイル,Chars), 'onclickにアクションを追加または追記'(Chars),!. 'onclickにアクションを追加または追記'(Chars) :- 'aタグを選別'(Chars,L0,R1,R2,_Atag), 'onclick要素候補'(_Atag,_onclick要素候補), 'onclick句の生成'(_onclick要素候補,_onclick句), put_chars(L0), '現在のonclick句の削除'(R1,R11), append(R11,_onclick句,R12), put_chars(['<',a,' '|R12]), put_chars(['<','/',a,'>']), 'onclickにアクションを追加または追記'(R2). 'aタグを選別'(Chars,L0,R1,R2,_Atag) :- append(L0,['<',a,' '|R1],['<','/',a,'>'|R2],Chars), \+(append(_,['<','a',' '|_],R1)), \+(append(_,['<','/',a,'>'|_],R1)), _Atag = ['<',a',' '|R1]. 'onclick要素候補'(_Atag,_onclick要素候補) :- append(L0,[h,r,e,f,'=','"'|_onclick要素候補],['-',r,e,g,i,s,t,'"'|R2],_Atag),!. 'onclick句の生成'(_onclick要素候補,_onclick句) :- append([' ',o,n,c,l,i,c,k,'=','"'|_onclick要素候補],['"',' '],_onclick句). '現在のonclick句の削除'([],[]) :- !. '現在のonclick句の削除'([' ',o,n,c,l,i,c,k,'=','"'|R1],[' '|R2]) :- append(_,['"',' '|R2],R1),!. '現在のonclick句の削除'([A|R1],[A|R2]) :- '現在のonclick句の削除'(R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/700 # # サクラエディタで、改行部分を連番+改行に置き換えたいのですけど、連番に変換するにはどうしたらよろしいでしょうか? # # 文字列1 # 文字列2 # # を # 1 # 文字列1 # 2 # 文字列2 # # といったかんじです。 # '改行部分を連番+改行に置き換える'(_ファイル) :- get_lines(_ファイル,Lines), open(_ファイル,write,Outstream), append(L0,[Line|R],Lines), length([_|L0],N), write_formatted(Outstream,'%t\n%t\n',[N,Line]), R = [], close(Outstream). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/694 # # Flexible Renamerというソフトで音楽ファイル名の検索&一括置換したいのですが、 # # 対象: aaa_bbb_01ccc.mp3 # ↓ # 結果: aaa_bbb_01_ccc.mp3 # # "_"区切りの三番目の2桁数字部分が区切られていないヤツを(選び)全て結果のように区切りたい、ということです。 # # よろしくおねがいします。 # % sub_atom/10 は http://nojiriko.asai/prolog/t264_u.html を参照 '対象:aaa_bbb_01ccc.mp3 -> 結果:aaa_bbb_01_ccc.mp3 "_"区切りの三番目の2桁数字部分が区切られていないヤツを(選び)全て結果のように区切りたい'(_名前,_区切り直された名前) :- split(_名前,['_'],[_項1,_項2,_項3]), sub_atom(_項3,_検索位置,1,_残り文字数,H,A,T,_,_,_), \+((A@>='0',A@=<'9')), concat_atom([_項1,'_',_項2,'_',H,'_',A,T],_区切り直された名前),!. '対象:aaa_bbb_01ccc.mp3 -> 結果:aaa_bbb_01_ccc.mp3 "_"区切りの三番目の2桁数字部分が区切られていないヤツを(選び)全て結果のように区切りたい'(_名前,_名前). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1197620454/672 # # 入力制限を掛けたいと思っているのですが # #   ̄竸字  # ◆. (ピリオド) #  _ (アンダースコア) # ぁ.丱奪スペース # ァDelete # # のみ入力可能にしたいのですがどの様な正規表現をかけばよいでしょうか? # # ※◆銑イ竜述が分かりません。 # 次の正規表現にどの様に修正を加えればよいでしょうか? # Match result = Regex.Match(対象の文字列,"^[a-zA-Z0-9]+$"); # # 入力制限を掛けたい(_文) :- get_chars(Chars), 入力適合集合(Chars,_適合文字ならび,_不適合文字ならび), concat_atom(適合文字ならび,_文). 入力適合集合([],[],[]) :- !. 入力適合集合([A|R1],[A|R2],R3) :- 入力適合文字(A), 入力適合集合(R1,R2,R3),!. 入力適合集合([A|R1],R2,[A|R3]) :- 入力適合集合(R1,R2,R3). 入力適合文字(A) :- 英数字(A),!. 入力適合文字('.') :- !. 入力適合文字('_') :- !. 入力適合文字('\b') :- !. 入力適合文字(DLE) :- char_code(DLE,127),!. 英数字(A) :- A @>= '0', A @=< '9',!. 英数字(A) :- A @>= 'a', A @=< 'z',!. 英数字(A) :- A @>= 'A', A @=< 'Z',!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/642 # # test.abc.ne.jp # test.abcdef.ne.jp # test.ztv.ne.jp # # 「test.abc.ne.jpは除外」というルールを # ^test\.[^abc]+\.ne\.jp$ # と書いたのですが、test.abcdef.ne.jpも除外されてしまいます # # ^test\.(?!abc(?!def))\w+\.ne\.jp$ # と書けばいいのですが、(?!)は環境により使えません # (?!)を使わず、「test.abc.ne.jpを除外し、test.abcdef.ne.jpは除外しない」というルールを教えていただきたいです。よろしくお願いします # # 'test.abcと.ne.jpの間にdefだけは入ることができない'(_文字列) :- atom_chars(_文字列,Chars), append(_,[t,e,s,t,'.',a,b,c|L1],['.',n,e,'.',j,p|_],Chars), \+(L1 = [d,e,f]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 'test.abcと.ne.jpの間には何も入ることができない'(_文字列) :- atom_chars(_文字列,Chars), append(_,[t,e,s,t,'.',a,b,c'.',n,e,'.',j,p|_],Chars). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 'test.abcと.ne.jpの間には何も入ることができない'(_文字列) :- atom_chars(_文字列,Chars), append(_,[t,e,s,t,'.',a,b,c|L1],['.',n,e,'.',j,p|_],Chars), L1 = []. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/642 # # test.abc.ne.jp # test.abcdef.ne.jp # test.ztv.ne.jp # # 「test.abc.ne.jpは除外」というルールを # ^test\.[^abc]+\.ne\.jp$ # と書いたのですが、test.abcdef.ne.jpも除外されてしまいます # # ^test\.(?!abc(?!def))\w+\.ne\.jp$ # と書けばいいのですが、(?!)は環境により使えません # (?!)を使わず、「test.abc.ne.jpを除外し、test.abcdef.ne.jpは除外しない」というルールを教えていただきたいです。よろしくお願いします # # % abcとneの間にdefだけは入ることができない場合 除外文字列(_文字列) :- atom_chars(_文字列,Chars), append(_,[t,e,s,t,'.',a,b,c|L1],['.',n,e,'.',j,p|_],Chars), \+(L1 = [d,e,f]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % abcとneの間には何も入ることができない 除外文字列(_文字列) :- atom_chars(_文字列,Chars), append(_,[t,e,s,t,'.',a,b,c'.',n,e,'.',j,p|_],Chars). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/629 # # A=01 # A=02 # A=abc01 # A=_abc_02 # A=01_02_abc # # これで、A=01 や A=02 だけにマッチさせる記述を教えてください # A=(?!abc|_abc)\w+ # ではA=01_02_abcまでマッチしてしまいます # A=(?!abc|_abc)\w+(?!_abc) でも A=(?!abc|_abc)\w+(?!_abc)$ でもダメでした # よろしくお願いします # 'A=01\\nA=02\\nA=abc01\\nA=_abc_02\\nA=01_02_abc\\n これで、A=01 や A=02 だけにマッチさせる'(A,'','01','') :- sub_atom(A,0,_,0,'01'),!. 'A=01\\nA=02\\nA=abc01\\nA=_abc_02\\nA=01_02_abc\\n これで、A=01 や A=02 だけにマッチさせる'(A,'','02','') :- sub_atom(A,0,_,0,'02'),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/614 # # # .replace(/^(http:\/\/farm1\.static\.flickr\.com\/[^/]+\/\w+_\w+_)m(\.\w+)$/, "$1o$2") # # ↑ # のスクリプトを改変したいのですが、 # 以下の場合の正規表現をそれぞれ教えてください # # ( 1 ) # http://ime.nu/img.pics.livedoor.com/*/*/*/*-*.jpg # ↓ 「*-*.jpg」を「*-1024.jpg」に変える # http://ime.nu/img.pics.livedoor.com/*/*/*/*-1024.jpg # # ※こういうURL置換させることを目指してます # http://ime.nu/img.pics.livedoor.com/009/0/b/0b3b287d7e66fff3ec46-M.jpg # ↓ # http://ime.nu/img.pics.livedoor.com/009/0/b/0b3b287d7e66fff3ec46-1024.jpg # # # ( 2 ) # http://ime.nu/*.photobucket.com/*/*/*/th_*.jpg # ↓ 「th_」を削除 # http://ime.nu/*.photobucket.com/*/*/*/*.jpg # # ※こういうURL置換させることを目指してます # http://ime.nu/i784.photobucket.com/albums/yy125/Pusgin/th_alex1a.jpg # ↓ # http://ime.nu/i784.photobucket.com/albums/yy125/Pusgin/alex1a.jpg # # # ( 3 ) # http://ime.nu/*.content.foto.mail.ru/*/*/*/*-*.jpg # ↓ 「*-*.jpg」を「i-*.jpg」に変える # http://ime.nu/*.content.foto.mail.ru/*/*/*/i-*.jpg # # ※こういうURL置換させることを目指してます # http://ime.nu/img3.content.foto.mail.ru/mail/semins/3294/p-5879.jpg # ↓ # http://ime.nu/img3.content.foto.mail.ru/mail/semins/3294/i-5879.jpg # # '例えば、http://ime.nu/img.pics.livedoor.com/009/0/b/0b3b287d7e66fff3ec46-M.jpgをhttp://ime.nu/img.pics.livedoor.com/009/0/b/0b3b287d7e66fff3ec46-1024.jpg に変えたい'(URL1,URL2) :- sPLIT(URL1,['/'],L), append(L1,[File],L), sPLIT(File,['.jpeg'],[A,B]), append(L1,[A,'-1024',B],L2), concat_atom(L2,URL2). '例えば、http://ime.nu/i784.photobucket.com/albums/yy125/Pusgin/th_alex1a.jpgをhttp://ime.nu/i784.photobucket.com/albums/yy125/Pusgin/alex1a.jpg に変えたい'(URL1,URL2) :- sPLIT(URL1,['/'],L), append(L1,[File],L), sPLIT(File,['.jpeg'],[A,B]), append(L1,[alex1a,B],L2), concat_atom(L2,URL2). '例えば、http://ime.nu/img3.content.foto.mail.ru/mail/semins/3294/p-5879.jpgをhttp://ime.nu/img3.content.foto.mail.ru/mail/semins/3294/i-5879.jpg に変えたい'(URL1,URL2) :- sPLIT(URL1,['/'],L), append(L1,[File],L), sPLIT(File,['-'],[A,'-',B]), append(L1,[i,'-',B],L2), concat_atom(L2,URL2). '例えば、http://c3.ac-images.myspacecdn.com/images02/80/m_22e6adfa8f2b4dafbf00b28a78e9db6e.jpgをhttp://c3.ac-images.myspacecdn.com/images02/80/l_22e6adfa8f2b4dafbf00b28a78e9db6e.jpg に変えたい'(UR1,URW) :- sPLIT(URL1,['/'],L), append(L1,[File],L), sPLIT(File,['_'],[A,'_',B]), append(L1,[i,'_',B],L2), concat_atom(L2,URL2). '例えば、http://sphotos.ak.fbcdn.net/hphotos-ak-snc1/hs137.snc1/5852_132531839605_775304605_3072465_7463459_s.jpgをhttp://sphotos.ak.fbcdn.net/hphotos-ak-snc1/hs137.snc1/5852_132531839605_775304605_3072465_7463459_n.jpg に変えたい'(URL1,URL2) :- sPLIT(URL1,['/'],L), append(L1,[File],L), sPLIT(File,['_','.jpeg'],L), append(L1,[_,'.jpeg'],L), append(L1,[n,'.jpeg'],L2), concat_atom(L2,URL2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/596 # # 【】で囲まれた任意の同一文字列(文字数可変)が2回続いた場合にマッチする正規表現をお願いします # # 【AAA】【AAA】はマッチ # 【AAA】【BBB】はマッチしない # # という感じです # # '【】で囲まれた任意の同一文字列(文字数可変)が2回続いた場合にマッチする'(_対象文字列,_照合部分より前の文字列,_照合部分文字列,_残り文字列) :- atom_chars(_対象文字列,Chars), 照合基本部分(L,L0,L1,L2), '【】で囲まれた任意の同一文字列(文字数可変)が2回続いた'(L1,L2,_2回続いた文字ならび,R), 文字ならびを文字列に変換(L0,_2回続いた文字ならび,R,_照合部分より前の文字列,_照合部分文字列,_残り文字列). 照合基本部分(L,L0,L1,L2) :- append(L0,['【'|L10],['】'|L2],L), all(L10,A), append(['【'|L10],['】'],L1). '【】で囲まれた任意の同一文字列(文字数可変)が2回続いた'(L1,L2,_2回続いた文字ならび,R) :- append(L1,R,L2), append(L1,L1,_2回続いた文字ならび). 文字ならびを文字列に変換(L0,_2回続いた文字ならび,R,_照合部分より前の文字列,_照合部分文字列,_残り文字列) :- atom_chars(_照合部分より前の文字列,L0), atom_chars(_照合部分文字列,_2回続いた文字ならび), atom_chars(_残り文字列,R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/592 # # 特定の文字だけで構成される行 にマッチする正規表現をお願いします。 # # あああああああ # wwwwwwwwwww # HHHHHHHHHHHHH # # のような行です。 # # '特定の文字だけで構成される行にマッチする'([_行|_],_行) :- atom_chars(_行,Chars), all(Chars,_). '特定の文字だけで構成される行にマッチする'([_|R],_行) :- '特定の文字だけで構成される行にマッチする'(R,_行). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '特定の文字だけで構成される行にマッチする'(_文字列,_行) :- atom(_文字列), atom_chars(_文字列,_文字ならび), '特定の文字だけで構成される行にマッチする'(_文字ならび,_行). '特定の文字だけで構成される行にマッチする'(_文字ならび,_行) :- append(L0,['\n'|R],_文字ならび), all(L0,A), \+(A='\n'), concat_atom(L0,_行). '特定の文字だけで構成される行にマッチする'(_文字ならび,_行) :- append(L0,['\n'|R],_文字ならび), all(L0,A), \+(A='\n'), '特定の文字だけで構成される行にマッチする'(R,_行). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/589 # # "A"にはマッチするけど"ABC"にはマッチしない正規表現お願いします # # '"A"にはマッチするけど"ABC"にはマッチしない'(_文字列,S0,'A',S1) :- sub_atom(_文字列,St,Len,R1,'A'), \+(sub_atom(_文字列,St,3,R2,'ABC')), sub_atom(_文字列,0,St,_,S0), St2 is St + Len, sub_atom(_文字列,St2,R2,0,S1). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '"A"にはマッチするけど"ABC"にはマッチしない'(_文字列,S0,S,S1) :- atom_chars(_文字列,Chars), '"A"にはマッチするけど"A","B","C"にはマッチしない'(Chars,L0,L,L1), concat_atom(L,S), concat_atom(L0,S0), concat_atom(L1,S1). '"A"にはマッチするけど"A","B","C"にはマッチしない'(Chars,L0,['A'],L1) :- append(L0,['A'],L1,Chars), \+(append(L0,['A','B','C'],_,Chars)). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/585 # # 2桁以上の英数字にマッチするけど3桁にはマッチしない正規表現はどう書けば良いんでしょうか? # '2桁以上の英数字にマッチするけど3桁にはマッチしない'(_文字列,_2桁以上の英数字) :- sub_atom(_文字列,_,_副文字列の長さ,_,_2桁以上の英数字), _副文字列の長さ >= 2, \+(_副文字列の長さ=3), atom_codes(_2桁以上の英数字,L), すべて英数コード(L). すべて英数コード([]) :- !. すべて英数コード([_コード|R]) :- 英数コード(_コード), すべて英数コード(R). 英数コード(Code) :- Code >=48,Code =< 57,!. 英数コード(Code) :- Code >=65,Code =< 90,!. 英数コード(Code) :- Code >=97,Code =< 122,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/585 # # 2桁の英数字にはマッチするけど3桁にはマッチしない正規表現はどう書けば良いんでしょうか? # % 「3桁にはマッチしない」は表現できない。 % こちらを参照してください '2桁の英数字にはマッチするけど3桁にはマッチしない'(_文字列,_2桁の英数字) :- sub_atom(_文字列,_,2,_,_2桁の英数字), atom_codes(_2桁の英数字,[Code1,Code2]), 英数コード(Code1), 英数コード(Code2). 英数コード(Code) :- Code >=48,Code =< 57,!. 英数コード(Code) :- Code >=65,Code =< 90,!. 英数コード(Code) :- Code >=97,Code =< 122,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/503 # # 秀丸ですが、指定の文字列が無い行全てを削除したいです。 # # 以下の様な複数行のターゲットがあって、zyzの文字列が有る行のみ # 残したいのです。 # # .+[^(zyz)].+\n じゃダメだったし、力不足でニッチもサッチもいきませんorz # どなたかHELP ME・・・・・ # # AAABBBzzyCCDDDEEEAAA # AAABBBDDzyzEEEAAA # AAABBBCCzyzEEEAAA # AAABBBCCDDDAAA # AAACCDDDEEEAA # AzyzAABBBCCDDDEEEAAA # 指定の文字列が無い行全てを削除したい(_ファイル名,_削除指定文字列) :- get_lines(_ファイル名,Lines), findall(_行,( append(_,[_行|_],Lines), 指定文字列がある(_行,_削除指定文字列)), Lines2), put_lines(_ファイル名,Lines2). 指定文字列がある(_行,_指定文字列) :- sub_atom(_行,_,_,_,_指定文字列),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/555 # # シェルの中で入力ファイル名から出力ファイル名を生成しています。 # 特定の文字列・記号を正規表現でリネームしたいのですが思いつきません。 # # ファイル名前半部が異なるファイルが50以上あるのですが、思い通りにrenameしてくれません。 # ご教示お願いいたします。 # # 対象ファイル: # iko_foobar_hogehoge_20101008.tsv # # リネーム後ファイル: # iko_foobar_hogehoge-20101008.tsv # # コマンドの実行イメージ # rename iko*_[\d,8].tsv iko*-[\d,8].tsv # # IN_FILE = ma_sina_syo_20100101 # OUT_FILE="${DIR_PATH_RCV}/${PREFIX}$(basename ${IN_FILE})${MARK}${YMD}.tsv" # OUT_FILE=iko_ma_sina_syo-20100101.tsv # # # ファイル名前半部が異なるファイルをrenameする(_ディレクトリ名) :- concat_atom(['ls -N ',_ディレクトリパス名',S), shs(S,_行ならび), append(_,[_行|R],_行ならび), atom_chars(_行,Chars), length(L2,9), append(L1,L2,Chars), append([_],L3,L2), 全部数字(L3), concat_atom(L1,S1), concat_atom(L3,S3), concat_atom(['mv ',_行,' ','iko_',S1,'-',S3,'.tsv']),Mv), system(Mv), R = [],!. 全部数字([]) :- !. 全部数字([A|R]) :- append(_,[A|_],['0','1','2','3','4','5','6','7','8','9']),全部数字(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/525 # # http://ime.nu/test.com/test1/test2/test3/pic.jpg から # test.com/test1/test2/test3 を取るにはどう書いたらいいでしょうか # # test1やtest2の階層は増えたり減ったりします。 # 要するにhttp://ime.nu/から最後の/の間の値がほしいです # # '要するにhttp://ime.nu/から最後の/の間の値がほしいです'(_行,_欲しい部分文字列) :- atom_chars(_行,Chars), append(_,[h,t,t,p,:,/,/,i,m,e,'.',n,u,/|L],[/|R],Chars), \+(append(_,[/|_],R)), atom_chars(_欲しい部分文字列,L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/522 # # ●正規表現の使用環境 # PHP5.29 # # ●検索か置換か? # 検索 # # ●説明 # :より前の記号部分を取得したい。 # # ●対象データ # 5789:石鹸 # w555-2:タオル # Zxcvb:ハンガー # # ●希望する結果 # 5789 # w555-2 # Zxcvb # ':より前の記号部分を取得したい。 '(_行ならび,_置換された行ならび) :- findall(_コロンより前の記号部分,( append(_,[_行|_],_行ならび), コロンより前の記号部分(_行,_コロンより前の記号部分)), _置換された行ならび). コロンより前の記号部分(_行,_コロンより前の記号部分) :- sub_atom(_行,_コロンの位置,1,_,':'), sub_atom(_行,0,_コロンの位置,_,_コロンより前の記号部分),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/529 # # A3AACD9ABD377E716127E010FEAC9EBE のような半角英数字32文字の取得はどう書けばいいんでしょうか? 'A3AACD9ABD377E716127E010FEAC9EBE のような半角英数字32文字の取得'(_文字列,_前文字列,_検索文字列,_後文字列) :- atom_chars(_文字列,Chars), 半角英数N文字の連続を検索(Chars,32,L0,[],L0,L,R), atom_chars(_前文字列,L0), atom_chars(_検索文字列,L), atom_chars(_後文字列,R). 半角英数N文字の連続を検索([],N,[],L1,[],L) :- length(L1,N), reverse(L1,L),!. 半角英数N文字の連続を検索(R,N,L1,[],L,R) :- length(L1,N), reverse(L1,L),!. 半角英数N文字の連続を検索([A|R1],N,L1,[A|R0],L,R) :- \+(半角英数字(A)), 半角英数N文字の連続を検索(R1,N,[],R0,L,R),!. 半角英数N文字の連続を検索([A|R1],N,L1,[A|R0],L,R) :- 半角英数N文字の連続を検索(R1,N,[A|L1],R0,L,R). 半角英数字(C) :- member([U1,U2],[['A','Z'],[a,z],['0','9']]), C @>= U1, C @=< U2,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/579 # # 見出しと任意文字列の間にtabを挿入したいのですが、そうした置換は可能でしょうか? # サクラエディタを使っています。 # 幼稚な質問をお許し下さい # # # 見出し1=任意文字列1 # 見出し2=任意文字列2=任意文字列3 # 見出し3=任意文字列4=任意文字列5=任意文字列6 # # 【こうしたい】 # 見出し1=  任意文字列1 # 見出し2=  任意文字列2=任意文字列3 # 見出し3=  任意文字列4=任意文字列5=任意文字列6 # # # # # # 見出しと任意文字列の間にtabを挿入したい(_対象となる行ならび,_見出しと任意文字列の間にtabを挿入した行ならび) :- findall(_tabを挿入された行,( append(_,[_行|_],_対象となる行ならび), 文字列置換(_行,'=','=\t',_tabを挿入された行)), _見出しと任意文字列の間にtabを挿入した行ならび). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 文字列置換/4 が未定義だったら、 見出しと任意文字列の間にtabを挿入したい(_対象となる行ならび,_見出しと任意文字列の間にtabを挿入した行ならび) :- findall(_tabを挿入された行,( append(_,[_行|_],_対象となる行ならび), split(_行,['='],[_見出し|R]), concat_atom(R,'=',S), concat_atom([_見出し,'=','\t',S],_tabを挿入された行)), _見出しと任意文字列の間にtabを挿入した行ならび). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/576 # # 先頭から3文字にマッチする表現を教えてください # 先頭から3文字にマッチする表現([A,B,C|R],[A,B,C],R). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 先頭から3文字にマッチする表現(_文字列,'',_先頭から3文字にマッチする表現の文字列,_残り文字列) :- sub_atom(_文字列,0,3,R,_先頭から3文字にマッチする表現の文字列), sub_atom(_文字列,3,R,_,_残り文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/572 # # ●正規表現の使用環境 # php5 # # ●検索か置換か? # 置換 # # ●説明 # tableタグ内の改行(<br />)を全て削除したい # # ●対象データ # <table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx"><br /> # <tbody><br /> # <tr><br /> # <td><br /> # </td><br /> # </tr><br /> # </tbody><br /> # </table> # # ●希望する結果 # <table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx"> # <tbody> # <tr> # <td> # </td> # </tr> # </tbody> # </table> # # 'tableタグ内の改行タグを全て削除したい'(_ファイル) :- get_chars(_ファイル,Chars), 'tableタグ内の改行タグを全て削除したい'(Chars,L), put_chars(_ファイル,L). 'tableタグ内の改行タグを全て削除したい'([],[]) :- !. 'tableタグ内の改行タグを全て削除したい'(L1,L2) :- append(L0,[<,t,a,b,l,e,>|R],L1), append(L2,[<,/,t,a,b,l,e,>|R2],R), '改行タグの削除'(L2,L3), 'tableタグ内の改行タグを全て削除したい'(R2,L4), append(L0,[<,t,a,b,l,e,>|L3],L4,L2),!. 'tableタグ内の改行タグを全て削除したい'(L,L). '改行タグの削除'([],[<,/,t,a,b,l,e,>]) :- !. '改行タグの削除'([<,b,r,' ',/,>|R1],R2) :- '改行タグの削除'(R1,R2),!. '改行タグの削除'([A|R1],[A|R2]) :- '改行タグの削除'(R1,R2),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/568 # # 質問です。 # テキストの中の<location></location>で囲まれた行のみ処理対象にして、 # 1.<location></location>を残す。 # 2../(ピリオドとスラッシュ)を追加。 # 3.前から8個目(後ろから1個目)の/(スラッシュ)以降のファイル名を残す。 # という正規表現を教えてください。 # # 例 # <location>file:///(ドライブ名):/(フォルダ名)/(フォルダ名)/(フォルダ名)/(フォルダ名)/(ファイル名)</location> # という行がテキストファイル内に存在したら # <location>./(ファイル名)</location> # という内容に変更したい。フォルダ名とファイル名に規則性無し。 # 特に、8個目の/(スラッシュ)以降の文字列を残す方法が全くワカリマヘン。 # # 現状レベル # 昨日から丸1日正規表現に取り組んで、近づいてる様な近づいてない様な抽出実験してるレベルです。 # # 因みに今回のテキストファイルは、VLCのプレイリストのxspfファイルです。 # ファイルを移動した時、プレイリストが絶対アドレスで定義されてるので、リンクが切れてしまいます。 # 今回の変更で、相対アドレスになりある程度のファイル移動が可能になる。まあ仕事じゃない趣味のレベルです。 # # 宜しくお願いします。 # 'テキストの中ので囲まれた行のみ処理対象にして、1.を残す。2../(ピリオドとスラッシュ)を追加。3.前から8個目(後ろから1個目)の/(スラッシュ)以降のファイル名を残す。'(_テキストファイル) :- forall('テキストの中ので囲まれた行のみ処理対象にして、'(_テキストファイル,_行), 1.を残す。2../(ピリオドとスラッシュ)を追加。3.前から8個目(後ろから1個目)の/(スラッシュ)以降のファイル名を残す。'(_行)). テキストの中の(_テキストファイル,_行) :- get_lines(_テキストファイル,Lines), member(_行,Lines). 'で囲まれた行のみ処理対象として、'(_行,_要素ならび,_囲まれた部分) :- 'SPLIT'(_行,['','/',''],L), append([''],_囲まれた部分,[''],L),!. 'で囲まれた行のみ処理対象として、'(_行,_,_) :- '処理対象外の行はそのまま出力'(_行). 'SPLIT'(_行,['','/',''],L), append([''],_囲まれた部分,[''],L). '1.を残す。2../(ピリオドとスラッシュ)を追加。3.前から8個目(後ろから1個目)の/(スラッシュ)以降のファイル名を残す。'(_囲まれた部分) :- append(_,['/',_ファイル名],_囲まれた部分), atomic_list_concat(['','./',_ファイル名,''],Atom), writef('%t\n',[Atom]),!. '処理対象外の行はそのまま出力'(_行) :- writef('%t\n',[_行]), fail. append([],L2,L3,L4) :- append(L2,L3,L4). append([U|L1],L2,L3,[U|L4]) :- append(L1,L2,L3,L4). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/557 # # JMeterで何とか以下のHTMLの『二番目の』optionを拾いたいんだけど、どーも上手くいきません。 # <select name="select$item1" onchange="javascript:dummry();" id="select_item1"> # <option selected="selected" value="0">(none)</option> # <option value="1">item1</option> # <option value="2">item2</option> # <option value="3">item2</option> # </select> # ※optionの行にはいくつかタブが入っています。 # # 「id="select_item1">([.\r\n\t\f]*)option value="([1-9]*)"」と書けば拾ってくれると思ったんだけどダメでした。 # 何か忘れている箇所がありましたら、是非アドバイスをお願いします。 # # ちなみに(おそらくnameに$が入っているせいだと思いますが)HTMLリンクパーサは動きません(涙 # # '『二番目の』optionを拾いたい'(_htmlファイル,_二番目のoption) :- get_lines(Lines), '『二番目の』option'([],Lines,_二番目のoption). '『二番目の』option'([_],[_行|R],_二番目のoption) :- 'SPLIT'(_行,['>',''|_],L), last(L0,_二番目のoption),!. '『二番目の』option'(L,[_行|R],_二番目のoption) :- 'SPLIT'(_行,['>','',L), '『二番目の』option'([_|L],R,_二番目のoption). '『二番目の』option'(L,[_行|R],_二番目のoption) :- '『二番目の』option'(L,R,_二番目のoption). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1262163854/238 # # Repl-Aceというテキスト置換ツールを使っているんですが、 # # 1月 # ・1日 # ・2日 # ・3日 # 2月 # ・1日 # ・2日 # ・3日 # # といったテキストを、 # # 1月1日 # 1月2日 # 1月3日 # 2月1日 # 2月2日 # 2月3日 # # といったように置換することができず困っています。 # 単純な文字の置換や簡単な正規表現は理解できるのですが、 # 1月から2月までの「・」を「1月」に置換、2月から3月までの「・」を「2月」に置換、3月から(ry # を一気に行えるような正規表現ってありますか? # Repl-Aceで試すのは自力でやるので、一般的な記述方法があれば教えてください。 # おながいします。 # 月日の構造表現を平坦な月日に置換(InputTextFile,OutputTextFile) :- get_lines(InputTextFile,Lines), 平坦な月日に置換(Lines,L), put_lines(OutputTextFile,L). 平坦な月日に置換([],[]) :- !. 平坦な月日に置換([_月|R1],L) :- \+(sub_atom(_月,0,1,_,'.')), 平坦な月日に置換(_月,R1,R2,L1), 平坦な月日に置換(R2,L2), append(L1,L2,L). 平坦な月日に置換(_,[],[],[]) :- !. 平坦な月日に置換(_,[_月|R1],[_月|R1],[]) :- \+(sub_atom(_月,0,1,_,'.')),!. 平坦な月日に置換(_月,[A|R1],R,[C|R2]) :- sub_atom(A,1,_,0,B), concat_atom([_月,B],C), 平坦な月日に置換(_月,R1,R,R2),!. % 以下のサイトは # 出典:: http://pc11.2ch.net/test/read.cgi/php/1147830986/9 # # 1.1行ずつURLが記述されたテキストファイルを読み込み、 # 2.そのURLのコンテンツを取得して # 3.タイトルとURLを画面に出力(コンソールに直接でもブラウザへでも可) # するプログラムを作ってください。 # # 尚テキストファイルに記述されているURLは妥当なものと見なして構わないものとする。 # (リンク先が存在し、そこには必ず<title></title>で囲まれた箇所があるhtml) # また正常系のみで、エラー(テキストファイルが読み込めない、ネットワークが # 繋がらなくてコンテンツが取得できない)の場合の処理は無くて構わない。 # # 1〜3まで順を追ってやっていくと良いよ。 # 1がファイルの扱い、ループ処理や配列の扱い(逐次処理でやれば配列使わないけど)、 # 2がネット(HTTP)関連、3が文字列処理や正規表現あたり。 # '1行ずつURLが記述されたテキストファイルを読み込み、そのURLのコンテンツを取得してタイトルとURLを画面に出力(コンソールに直接でもブラウザへでも可) する'(_テキストファイル) :- get_lines(_テキストファイル,Lines), member(URL,Lines), 'URLをHost,Port,Fileに分解する'(URL,Host,Port,File), www_lines(Host,Port,File,_行ならび), 文字コードを得る(_行ならび,_文字コード), タイトルを得る(_行ならび,_文字コード,_タイトル), write_formatted('URL=%t タイトル=%t\n',[URL,_タイトル]), fail. '1行ずつURLが記述されたテキストファイルを読み込み、そのURLのコンテンツを取得してタイトルとURLを画面に出力(コンソールに直接でもブラウザへでも可) する'(_). 'URLをHost,Port,Fileに分解する'(URL,Host,Port,File) :- 'sPLIT'(URL,['/',':'],[http,':','/','/',Host,':',Port,'/'|File]),!. 'URLをHost,Port,Fileに分解する'(URL,Host,80,File) :- 'sPLIT'(URL,['/',':'],[http,':','/','/',Host,'/'|File]),!. 文字コードを得る(_行ならび,_文字コード) :- append(_,[''|R],_行ならび), append(_,[_行|R1],R), sub_atom(_行,_,8,_,P,'char_set',_残り文字列,_,_,_), split(_残り文字列,['=',' ',',','>'],[A|_]), to_upper(A,B), 文字コード(A,_文字コード). タイトルを得る(_行ならび,euc,_タイトル) :- append(_,[''|R],_行ならび), append(_,[_行|R1],R), sub_atom(_行,_,7,_,_,'',_残り文字列,_,_,_), sub_atom(_残り文字列,_,8,_,_エンコードされたタイトル,'',_,_,_,_), URLの文字列をデコードする(_エンコードされたタイトル,_タイトル),!. 文字コード('EUC_JP',euc) :- !. 文字コード('EUC-JP',euc) :- !. 文字コード('SJIS_JP',sjis) :- !. 文字コード('SJIS-JP',sjis) :- !. www_lines(Host, Port, File, DataList) :- hp_open_client(Host, Port, Socket), make_request_header(Host,Header), hp_work_client(Socket,Header,DataList). hp_open_client(Host, Service, Socket) :- atom(Service), !, net_service(Service, tcp, Port), socket(internet, stream, Socket), host_addr(Host, Addr), socket_connect(Socket, Addr : Port). hp_open_client(Host, Port, Socket) :- integer(Port), !, socket(internet, stream, Socket), socket_connect(Socket, Host : Port). make_request_header(_ファイル,Header) :- myhostname(Myhostname), request_header_file(_ファイル,_整形されたファイル), concat_atom(['GET ',_ファイル,' HTTP/1.1\nHost: ',Myhostname, '\nUser-Agent: Mozilla/5.0 (X11; U; Linux i686; ja-JP; rv:1.7.8) Gecko/20050511\n', 'Accept: text/xml,application/xml,application/xhtml+xml,', 'text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\nAccept-Language: ja,', 'en-us;q=0.7,en;q=0.3\nAccept-Encoding: gzip,deflate\n', 'Accept-Charset: EUC-JP,utf-8;q=0.7,*;q=0.7\nKeep-Alive: 300\n', 'Connection: keep-alive\n\n'],Header). request_header_file(_ファイル,_ファイル) :- sub_atom(_ファイル,0,1,_,'/'),!. request_header_file(_ファイル,_整形されたファイル) :- \+(sub_atom(_ファイル,0,1,_,'/')), concat_atom(['/',_ファイル],_整形されたファイル),!. hp_work_client(Socket,Header,DataList) :- open(Socket, read, Input), open(Socket, write, Output), write_formatted(Output,'%t',[Header]), flush_output, findall(X,(repeat,get_line(Input,_診断,Data),(_診断=終了,!,fail;true)),DataList), close(Input), close(Output), socket_shutdown(Socket). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1268979408/209 # # さくらエディタを使っていて # # CHAPTER01=00:00:00.000 # CHAPTER01NAME=第一部 オープニング # CHAPTER02=00:09:13.400 # CHAPTER02NAME=オラはにんきもの # # こういうのを # # TRACK 01 AUDIO # TITLE "第一部 オープニング" # INDEX 01 00:00:00 # TRACK 02 AUDIO # TITLE "オラはにんきもの" # INDEX 01 09:13:40 # # こうしたいんですが、正規表現でできるもんなんでしょうか # できるとしたら答えを貰えるのが一番ですが、どこら辺を調べればいいのかヒントをもらえないでしょうか # # 変換(_ファイル名) :- get_lines(_ファイル名,Lines), 変換規則('TRACK',Lines,TRACK,S1), 変換規則('TITLE',Lines,TRACK,S2), 変換規則('TIME',Lines,TRACK,S3), write_formatted('%t\n%t\n%t\n',[S1,S2,S3]), fail. 変換(_). 変換規則('TRACK',Lines,TRACK,S) :- member(_文,Lines), sub_atom(_文,0,7,_,H,'CHAPTER',T,HL,XL,TL), append(L0,['='|R2],TL), \+(append(_,['N','A','M','E'],L0)), concat_atom(L0,TRACK), concat_atom(['TRACK',' ',TRACK,' ','AUDIO'],S). 変換規則('TITLE',_Lines,TRACK,S) :- member(_文,Lines), sub_atom(_文,0,7,_,H,'CHAPTER',T,HL,XL,TL), append(L1,['='|R],TL), append(L0,['N','A','M','E'|R2],L1), concat_atom(L0,TRACK), concat_atom(R,TITLE), concat_atom([' ','TITLE',' "',TITLE,'"'],S). 変換規則('TIME',Lines,TRACK,S) :- member(_文,Lines), sub_atom(_文,0,7,_,H,'CHAPTER',T,HL,XL,TL), append(L0,['='|R2],TL), \+(append(_,['N','A','M','E'],L0)), concat_atom(L0,TRACK), concat_atom(R2,TIME), concat_atom([' ','INDEX',' 01 ',TIME],S). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1248012902/53 # # 【 課題 】 # 以下のURLから正規表現を用いてキーワードの部分のみ抽出する # プログラムを作成せよ。 # # http://www.google.co.jp/search?q=キーワード&lr=lang_ja&ie=utf-8&oe=utf-8&aq=trls=org.mozilla:ja:official&client=firefox-a % Prolog は正規表現をサポートしないのでここでは汎用検索述語sub_atom/10を % 使ってみる。 t571(URL,_キーワード) :- sub_atom(URL,_,_,_,_,'?q=',G,_,_,_), sub_atom(G,_,_,_,_キーワード,'&',_,_,_,_),!. % ユーティリティ述語 sub_atom/10 の提案 % % A .. 文字列 (atom) % S .. 検索文字列開始変位 (integer) % L .. 検索文字列の長さ (integer) % R .. 残り長さ (integer) % H .. 検索文字列より前側の文字列 (atom) % X .. 検索文字列 (atom) % T .. 検索文字列より後の残り文字列 (atom) % HL .. 検索文字列より前側の文字ならび (chars) % XL .. 検索文字列文字ならび (chars) % TL .. 検索文字列より後の残り文字ならび (chars) % A がvarである時はH-HL,X-XL,T-TLの3組の中にvar-varの組があってはなりません。 sub_atom(A,S,L,R,H,X,T,HL,XL,TL) :- atom(A), !, sub_atom(A,S,L,R,X), sub_atom(A,0,S,_,H), N is S + L, sub_atom(A,N,R,_,T), atom_chars(H,HL), atom_chars(X,XL), atom_chars(T,TL). sub_atom(A,S,L,R,H,X,T,HL,XL,TL) :- var(A), !, atom_chars(H,HL), atom_chars(X,XL), atom_chars(T,TL), length(HL,S), length(XL,L), length(TL,R), concat_atom([H,X,T],A), sub_atom(A,S,L,R,H,X,T,HL,XL,TL). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1200175247/550 # # # (1)曜日を表す英語と日本語との対応を表すハッシュwdayを定義しなさい # # p wday["sunday"] #=> "日曜日" # p wday["monday"] #=> "月曜日" # p wday["saturday"] #=> "土曜日" # # (2)ハッシュのメソッドを使って(1)のハッシュwdayのペアの数を数えなさい # # (3)eachメソッドと(1)のハッシュwdayを使って以下の文字列を出力させてくださ い。 # 「sunday」は日曜日のことです。 # 「monday」は月曜日のことです。 # … # # (4)ハッシュには配列の%wのようなものがありません。そこで、空白とタブと改行 # (正規表現で定義するなら「/\s+/」)で区切られた文字列をハッシュに変換するメ ソッド # str2hashを定義してください。 # # p str2hash("bule 青 white 白\nred赤"); # #=> {"bule"=>"青", "white"=>"白", "red"=>"赤"} % (1) wday(sunday,日曜日). wday(monday,月曜日). wday(saturday,土曜日). % (2) wdayの節数(_節数) :- 節数(wday(_,_),_節数). 節数(_節形式,_節数) :- findall(1,_節形式,L), length(L,_節数). % (3) '(3)' :- forall(wday(A,B), writef('「%t」は%tのことです。\n',[A,B])). % (4) str2hash(S,_述語名) :- split(S,['\n'],L), member(A,L), split(A,['\t',' '],L1), str2hash(L1). str2hash([]). str2hash([_述語名,_値|R]) :- P =.. [_述語名,_値], assertz(P), str2has(R).
'), sub_atom(Line2,4,_,5,_日付か株価). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/244 # # よろしくお願いします。 # # ●正規表現の使用環境 # JavaScript # # ●検索か置換か? # 検索 # # ●説明 # xという文字から、xという文字までの取得 # ただしyxというパターンが含まれている場合は飛ばして、次のxを探す # x((?!yx).)*xを試しましたが、途中で検索が打ち切られて思うようになりません # # ●対象データ # "ab\"c",'def' # # ●希望する結果 # "ab\"c" # # 'xという文字から、xという文字までの取得。ただしyxというパターンが含まれている場合は飛ばして、次のxを探す'(_x,_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,[_x|R1],L3), append(L0,[_x],R1), 許容(_x,L0). 'xという文字から、xという文字までの取得。ただしyxというパターンが含まれている場合は飛ばして、次のxを探す'(_x,_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_,_,_後文字列_2,L1,[_x|R1],L3), append(L0,[_x],R1), 許容(_x,L0), 'xという文字から、xという文字までの取得。ただしyxというパターンが含まれている場合は飛ばして、次のxを探す'(_x,_後文字列_2,_前文字列,_適合文字列,_後文字列). 許容(_,[]) :- !. 許容(A,[A|_]) :- !,fail. 許容(A,['\\',A|R]) :- 許容(R). 許容(A,[_|R]) :- 許容(A,R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/236 # # 英数字プラスセミコロンはとれるのですが英数字の桁数が{3}をつけてもうまくいかず悩んでいます。 # # # ●正規表現の使用環境 # VBA # # ●検索か置換か? # 検索 # # ●説明 # 対象データのフォーマットチェックをしたいです # # A01;B02;C03;… # 英数字3桁がセミコロンで区切られたデータに対して様式通りならtrueを返します # 一番最後にはセミコロンはつきません # # ●対象データと希望する結果 # A01;B02;C03 →true # A01;B02;C03; →false # A01;B092;C03 →false # '英数字3桁がセミコロンで区切られたデータに対して様式通りならtrueを返します。一番最後にはセミコロンはつきません'(_文字列,true) :- R2 = [A,B,C,';'], \+(member(';',L1)), \+(member(';',L3)), すべてが英数字([A,B,C]),!. '英数字3桁がセミコロンで区切られたデータに対して様式通りならtrueを返します。一番最後にはセミコロンはつきません'(_文字列,false). すべてが英数字([]) :- !. すべてが英数字([A|R]) :- A @>= 0, A @=< 9, すべてが英数字(R). すべてが英数字([A|R]) :- A @>= 'A', A @=< 'Z', すべてが英数字(R). すべてが英数字([A|R]) :- A @>= 'a', A @=< 'z', すべてが英数字(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/741 # # 全てのdivを削除したい訳でなく、<td....></td>間にある<div></div>を削除したいのです。 # <td....></td>間にあるものは削除して、それ以外は改行したいのです。 # 'tdタグの中のdivタグを取り除く'(_文字列,_取り除かれた文字列) :- atom_chars(_文字列,Chars), append(L0,[<,t,d,>|L],[<,/,t,d>|R1],Chars), \+(append(_,[<,t,d,>|R2],L)), \+(append(_,[|R3],R2)), append(L01,[<,d,i,v,>|L2],[<,/,d,i,v>|R3],L), append(L0,[<,t,d,>|L01],R3,L1), append(L1,[<,/,t,d|R1],Chars2), atom_chars(_取り除かれた文字列,Chars2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/231 # # <(.*)>を取得したいのですが # <aiueo> # <aiueo<kakikukeko> # これはaiueo kakikukekoの2つを取得したいのですが # このままだと # aiueoとaiueo<kakikukekoが取得されてしまいます # どうしたらいいでしょうか? # # '<(.*)>を取得したいのですが <aiueo> <aiueo<kakikukeko> これはaiueo kakikukekoの2つを取得したい'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,[<|R2],[A|R3]), ( A == '<'; A == '>'), member(B,R2), \+(B == '<'), \+(B == '>'). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/220 # # ●正規表現の使用環境 # grepとかegrepとか # # ●検索か置換か? # 検索 # # ●説明 # a,nの2文字のみが含まれる行を検索したい # # ●対象データ # aaa # ann # nana # anana # sin # anans # # ●希望する結果 # 上4つのみ出力 # 下二つは引っかからない # # 'a,nの2文字のみが含まれる行を検索したい'(_行ならび,_行) :- append(_,[_行|_],_行ならび), findsetof(_文字,sub_atom(_行,_,1,_,_文字),[a,n]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/717 # # <html>......<div class="list">画像リスト<br>1枚目<br><img src="http://ime.nu/example.com/aaa.jpg"><br> # 2枚目<br><img src="http://ime.nu/example.com/bbb.jpg"><br> # 3枚目<br><img src="http://ime.nu/example.com/ccc.jpg"><br>もっと見る<br></div>........</html> # # これで<div class="list">と</div>の間のアドレスだけ抜き出すのってどうやりますか? # ........の中にも画像アドレスがあります。そっちはマッチさせないようにしたい。 # # preg_match_all("/list\".+?src=\"(.+)\".+</div>/", $html, $m); # # 'これで div class="list" と /div の間のアドレスだけ抜き出す'(File,URL) :- get_lines(File,Lines), append(_,[Line|_],Lines), 'div class="list" と /divの間'(Line,URL). 'div class="list" と /divの間'(Line,URL) :- sub_atom(Line,_,_,_,S1,S2,S3,L1,L2,[<,/,d,i,v,>|R3]), sub_atom(S2,0,18,N,'
'), sub_atom(S2,18,N,0,URL), \+(sub_atom(URL,_,_,_,'')). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/200 # # ●正規表現の使用環境 # VBScript # # ●検索か置換か? # 検索 # # ●説明 # http://ime.nu/upload.jpn.ph/500/bin/とんこつ.zip # だけを変数に入れて、後で変数を利用したい # # ●対象データ # </style> # # <META HTTP-EQUIV="Refresh" CONTENT="1;URL=http://ime.nu/upload.jpn.ph/500/bin/とんこつ.zip"> # </HEAD> # # ●希望する結果 # 適当な変数=http://ime.nu/upload.jpn.ph/500/bin/とんこつ.zip # 例:もし変数 var5 とかにとんこつ.zipを代入できるなら # WScript.Echo var5 # としたときにhttp://ime.nu/upload.jpn.ph/500/bin/とんこつ.zip # と出力できるようにしたいです。 # # もし上手く説明できてなかったらごめんなさい。 # よろしくお願いします。 # # 'URLを検索する'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,[h,t,t,p,:,/,/|R2],[' '|R3]), \+(sub_atom(S2,_,1,_,' ')), \+(append(_,[h,t,t,p,:,/,/|_],R2)). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/176 # # 言語:JAVA # 次の例文で、[ ]の部分にひらがなの「ぺ」が27回続く場合にのみマッチする正規表現 # #   ゆうていみやおうきむこうほりいゆうじとりやまあきら[ ] # # 処理対象文字 # ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺ # ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺ # ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺ # # 実行した正規表現 # .*ぺ{27} # # 実行結果 # ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺ # ゆうていみやおうきむこうほりいゆうじとりやまあきらぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺぺ # # 何で27回以外の「ぺ」が出力されるのか訳ワカメちゃん # # '次の例文で、[ ]の部分にひらがなの「ぺ」が27回続く場合にのみマッチする正規表現'(_文字列,_前文字列,_適合文字列,_後文字列) :- length(L2,27), all(L2,ペ), sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), \+(last(L1,ぺ)), \+(L3 = [ぺ|_]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/168 # # よろしくお願いします # # ●正規表現の使用環境 # PHP # # ●検索か置換か? # 置換 # # ●説明 # いくつか連続した\nを、すべて<br />に置換 # # ●対象データ # \n # \n\n\n # (連続数は1〜n) # # ●希望する結果 # <br /> # <br /><br /><br /> # # # 'いくつか連続した改行を、すべてhtmlの改行指定に変換'(_文字列,_変換された文字列) :- atom_codes(_文字列,Code1), コードならびの改行をすべてhtmlの改行指定に変換(Code1,Code2), atom_codes(_変換された文字列,Code2). コードならびの改行をすべてhtmlの改行指定に変換([],[]). コードならびの改行をすべてhtmlの改行指定に変換([10|R1],[60,47,98,114,62|R2]) :- コードならびの改行をすべてhtmlの改行指定に変換(R1,R2),!. コードならびの改行をすべてhtmlの改行指定に変換([Code|R1],[Code|R2]) :- コードならびの改行をすべてhtmlの改行指定に変換(R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/156 # # ●正規表現の使用環境 # PHP 5.1 # # ●検索か置換か? # 検索 # # ●説明 # 角括弧が対応する始点から終点までをすべて抽出したいです。 # # ●対象データ # ほげ[[hoge:f1=piyo,f2=fuga]ふが[[hogera:]]ぴよ]ほげら[[foo:]ぴよぴよ][[qux:a=xyzzy]] # # ●希望する結果 # ほげ[[hoge:f1=piyo,f2=fuga]ふが[[hogera:]]ぴよ]ほげら[[foo:]ぴよぴよ][[qux:a=xyzzy]] #   1^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   2^^^^^^^^^^^^^^^3^^^^^^^^^^^^^^ # # ご教授よろしくお願いします。 # 角括弧が対応する始点から終点までをすべて抽出したい(_文字列,_抽出文字列ならび) :- atom_chars(_文字列,Chars), 文字ならびから角括弧抽出(Chars,_抽出文字列ならび). 文字ならびから角括弧抽出([],[]) :- !. 文字ならびから角括弧抽出(['['|R1],[_副文字列|R2]) :- 対応する閉じ括弧まで抽出(R1,L1,R), atom_chars(_副文字列,['['|L1]), 文字ならびから角括弧抽出(R,R2). 文字ならびから角括弧抽出([_|R1],L) :- 文字ならびから角括弧抽出(R1,L). 対応する閉じ括弧まで抽出([],[],[]) :- !. 対応する閉じ括弧まで抽出([']'|R1],[']'],R1) :- !. 対応する閉じ括弧まで抽出(['['|R1],L,R) :- 対応する閉じ括弧まで抽出(R1,L2,R2), 対応する閉じ括弧まで抽出(R2,L3,R), append(['['|L2],L3,L),!. 対応する閉じ括弧まで抽出([A|R1],[A|R2],R) :- 対応する閉じ括弧まで抽出(R1,R2,R). % 以下のサイトは # 出題場所 http://hibari.2ch.net/test/read.cgi/tech/1301067486/144 # (本文が長すぎるというメッセージが出るので2つに分けています) # # ●正規表現の使用環境 # ActionScript 3.0 # # ●検索か置換か? # 検索 # # ●説明 # 文字列の先頭が「プラス符号かマイナス符号か数字か」と # 末尾が「数字か」でBoolean判定を行いたい。 # # ●対象データ # 1.2345  +123.45  -3.1245  青3.1245  3.1245赤 # # ●希望する結果 # 1.2345→true  +123.45→true  -3.1245 → true  青3.1245→false  3.1245赤→false # # # 試したコードは下記です。 # var patt0 = new RegExp("^(\d|[-]|[+])");//先頭部分の判定 # var patt1 = new RegExp("\d$");//末尾 # if (patt0.test(str0) == true && patt1.test(str0) == true) { # //trueと出力 # } else { # //falseと出力 # } # # 最初と最後の文字のみに注目しているのでフラグ("g"など)は無しにして # いますが、上の記述だと 1.2345 でもfalseが出力されます。 # # どう変えれば良いでしょうか? # 因みに、ActionScriptはJavaScriptと同じECMAスクリプトを起源にしています。 # (正規表現も共通点が多いようです) # 数値文字(['0','1','2','3','4','5','6','7','8','9']). 文字列の先頭が「プラス符号かマイナス符号か数字か」と末尾が「数字か」でBoolean判定を行う(_文字列) :- 数値文字(L), sub_atom(_文字列,0,1,_,_先頭), sub_atom(_文字列,_,1,0,_末尾), append(_,[_先頭|_],['+','-'|L]), append(_,[_末尾|_],L). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 数値文字(['0','1','2','3','4','5','6','7','8','9']). 文字列の先頭が「プラス符号かマイナス符号か数字か」と末尾が「数字か」でBoolean判定を行う(_文字列) :- atom_chars(_文字列,Chars), append([_先頭|_],[_末尾],Chars), 数値文字(L), append(_,[_先頭|_],['+','-'|L]), append(_,[_末尾|_],L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/121 # # ●正規表現の使用環境 # Apache RewriteRule # # ●検索か置換か? # 検索 # # ●説明 # 1〜5つのカンマ区切りの単語を一致させたい # 連結数は不定 # # ●対象データ # apple # apple,orange,pineapple,grape,melon # orange,pineapple,melon # # ●希望する結果 # ○apple # ○orange,pineapple,melon # × ,apple # # 不定数連結されたパターンに悩んでいます # '1〜5つのカンマ区切りの単語を一致させたい'(_文字列,_前文字列,_適合文字列,_後文字列) :- 'カンマを0-4個含むアルファベット文字列'(_文字列,_前文字列,_適合文字列,_後文字列), カンマは独立して4個以内で先頭と末尾はカンマではない(_適合文字列). 'カンマを0-4個含むアルファベット文字列'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), アルファベットならび(L1,L2,L3). アルファベットならび([],L2,[]) :- 全ての要素がアルファベット(L2),!. アルファベットならび([],L2,[A|_]) :- 全ての要素がアルファベット(L2), \+(アルファベット(A)),!. アルファベットならび(L1,L2,L3) :- last(L1,A), L3 = [B|_], \+(アルファベット(A)), \+(アルファベット(B)), 全ての要素がアルファベット(L2),!. 全ての要素がアルファベット(L2) :- \+((append(_,[A|_],L2),アルファベット(A))). アルファベット(A) :- char_code(A,Code), Code > 32. カンマは独立して4個以内で先頭と末尾はカンマではない(_適合文字列) :- sPLIT(_適合文字列,[','],L), count(append(_,[','|_],L),N), N =< 4, カンマは独立して(L), 先頭はカンマでない(L), 末尾はカンマでない(L). カンマは独立して(L) :- \+(append(_,[',',','|_],L)),!. 先頭はカンマでない(L) :- \+([','|_]=L). 末尾はカンマでない(L) :- \+(append(_,[','],L)). % 以下のサイトは # 正規表現だと、「当てはまる一部分を交換」ってのはやれるけど、 # 「当てはまる部分を含む一行を丸ごと交換」だと難しい。\ # っつーか思いつかんかった。やり方を。 当てはまる部分を含む一行を丸ごと交換(_文字列,_検索部分文字列,_置換行,_置換された文字列) :- atom_chars(_文字列,Chars), atom_chars(_検索部分文字列,_検索部分文字ならび), atom_chars(_置換行,_置換文字ならび), 当てはまる行を丸ごと交換(Chars,_検索部分文字ならび,_置換文字ならび,Chars2), concat_atom(Chars2,_置換された文字列),!. 当てはまる行を丸ごと交換([],[],_検索部分文字ならび,_置換文字ならび,[]) :- !. 当てはまる行を丸ごと交換([],L1,_検索部分文字ならび,_置換文字ならび,L1) :- \+(append(_,_検索部分文字ならび,_,L1)),!. 当てはまる行を丸ごと交換([],L1,_検索部分文字ならび,_置換文字ならび,_置換文字ならび) :- append(_,_検索部分文字ならび,_,L1),!. 当てはまる行を丸ごと交換(['\n'|R1],[],_検索部分文字ならび,_置換文字ならび,['\n'|R2]) :- 当てはまる行を丸ごと交換(R1,[],_検索部分文字ならび,_置換文字ならび,R2). 当てはまる行を丸ごと交換(['\n'|R1],L1,_検索部分文字ならび,_置換文字ならび,Chars2) :- append(_,_検索部分文字ならび,_,L1), 当てはまる行を丸ごと交換(R1,[],_検索部分文字ならび,_置換文字ならび,R2), append(_置換文字ならび,['\n'|R2],Chars2),!. 当てはまる行を丸ごと交換(['\n'|R1],L1,_検索部分文字ならび,_置換文字ならび,Chars2) :- \+(append(_,_検索部分文字ならび,_,L1)), 当てはまる行を丸ごと交換(R1,[],_検索部分文字ならび,_置換文字ならび,R2), append(L1,['\n'|R2],Chars2),!. 当てはまる行を丸ごと交換([A|R1],L1,_検索部分文字ならび,_置換文字ならび,Chars2) :- \+(A='\n'), append(L1,[A],L2), 当てはまる行を丸ごと交換(R1,L2,_検索部分文字ならび,_置換文字ならび,Chars2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/79 # # aaa=bbb;ccc=ddd;eee=fff # # という感じの文字列からcccの値dddを取得したいです。 # dddは可変でその部分にはセミコロンとカンマは入ることはありません。 # (セミコロンは区切りとしては使いますが値としては使いません。) # cccは最後に書かれてる場合もあり、その場合は、 # 上記のeee=fffのように最後にセミコロンがつきません。 # # そこで正規表現なんですが、 # ccc=(.*?;|[^;\,]+$) # という感じにしました。 # 後方参照で()内の部分を取り出したとき、 # ccc=ddd;のときは、「ddd;」といった感じにセミコロンつきで取得され、 # ccc=dddのときは、「ddd」といった感じにセミコロンなしで取得されます。 # ccc=ddd;のときでもセミコロンなしで取得したいのですが、 # 正規表現のみで可能でしょうか? # # 'aaa=bbb;ccc=ddd;eee=fffという感じの文字列からcccの値dddを取得したい'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,後文字列,L1,L2,L3), sub_atom(S1,_,1,0,C1), セミコロンかカンマ(C1), sub_atom(_後文字列,0,1,_,C2), セミコロンかカンマ(C2), セミコロンかカンマを含まない(L2), split(S2,['='],[S2_1,_適合文字列]), concat_atom([S1,S2_1,'='],_前文字列). セミコロンかカンマ(';'). セミコロンかカンマ(','). セミコロンかカンマを含まない([]). セミコロンかカンマを含まない([A|R]) :- \+(A = ';'), \+(A = ','), セミコロンかカンマを含まない(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/72 # # 長い文字列から文字列を抽出したいんだけど、どうすれば簡単ですか? # 122ch345673ch89 # この文字列から2chと3chの間の文字だけを取得したいです # # 長い文字列から文字列を抽出したい(_長い文字列,_前文字列,_抽出文字列,_後文字列) :- sub_atom(_長い文字列,_,_,_,_前文字列,_抽出文字列,_後文字列,_,_,_), 抽出したい文字列(_抽出文字列). 抽出したい文字列('2ch'). 抽出したい文字列('3ch'). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/60 # # よろしくお願いします。 # # ●正規表現の使用環境 # PHP 5.2.9 (XAMPP 1.7.1) # # ●検索か置換か? # 検索 # # ●説明 # 入力文字が+、-、数字以外ならエラーを返す # # ●コード # preg_match("/^[+|-]*\d+$/g", $string) # (1行ごとに処理するので、/mは不要です) # # ●希望する結果 # +100→○ # -488→○ # 1024→○ # *300→× # /200→× # Aaaa→× # ああ→× # '入力文字が+、-、数字以外ならエラーを返す'(_入力文字列,エラー) :- atom_chars(_入力文字列,Chars), append(_,[_文字|_],Chars), '入力文字が+、-、数字以外'(_文字),!. '入力文字が+、-、数字以外ならエラーを返す'(_入力文字列,正常終了). '+、-、数字以外'('+') :- !,fail. '+、-、数字以外'('-') :- !,fail. '+、-、数字以外'(_入力文字) :- 数字(_入力文字),!,fail. '+、-、数字以外'(_). 数字('0'). 数字('1'). 数字('2'). 数字('3'). 数字('4'). 数字('5'). 数字('6'). 数字('7'). 数字('8'). 数字('9'). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/31 # # 正規表現でとあるスレの、特定のURLを含まないレスをあぼーんにしたいと考えています # 特定のURLは"mt=8"と"hibari"が含まれたURLです # [^(mt=8)(hibari)] # と試しましたが駄目でした。どのようにすればよいのでしょうか? # # 正規表現でとあるスレの、特定のURLを含まないレスをあぼーんにしたい(_レス,URL) :- 'URLを切り出す'(_レス,_前文字列,URL,_後文字列), アボーンしない(URL),!. アボーンしない(URL) :- split(URL,['://','/'],L), append(_,[A|_],L), append(_,[A|_],[mate,hibari]),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/24 # # ●正規表現の使用環境 # C#.Net # # # ●検索か置換か? # 検索 # # # ●対象データ # data # (data # data) # (data) # Xdata # dataY # # ●希望する結果 # data # # # dataが()XY以外と隣接している場合は検索を一致させたくないのですが、 # それが中々できません。 # よろしくお願いします。 # # 'dataが()XY以外と隣接している場合は検索を一致させたくない'(_文字列,_前文字列,data,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,data,_後文字列,L1,L2,[A|R3]), \+(append(_,[A|_],['(',')','X','Y'])), \+((last(L1,B),append(_,[B|_],['(',')','X','Y']))). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/19 # # 繰り返しの処理は分かるので正規表現の書き方を教えて頂きたいです。 # よろしくお願いします。 # # ●正規表現の使用環境 # VB.NET2003 # # ●検索か置換か? # 検索 # # ●説明 # 果物の名前を検索したい # # ●対象データ # 箱の色・箱A/緑、箱B/橙、箱C/黄、箱D/赤 # 箱の中身・箱A/メロン、箱B/みかん、箱C/バナナ、箱D/りんご # 箱の大きさ・箱A/100cm、箱B/120cm、箱C/140cm、箱D/160cm # # ●希望する結果 # メロン # みかん # バナナ # りんご # 対象データ('箱の色・箱A/緑、箱B/橙、箱C/黄、箱D/赤\n箱の中身・箱A/メロン、箱B/みかん、箱C/バナナ、箱D/りんご\n箱の大きさ・箱A/100cm、箱B/120cm、箱C/140cm、箱D/160cm\n'). 果物の名前を検索したい(_希望する結果) :- 対象データ(_対象データ), split(_対象データ,['\n'],Lines), append(_,[Line|R],Lines), sub_atom(Line,0,4,_,箱の中身), sPLIT(Line,['・','、','/'],L2), append(_,['/',_希望する結果|_],L2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/15 # # Excelの置換で、 # マッチした文字列を、マッチした文字列の最初の一文字で置換したいです。 # # たとえば、 # # りんご # ごりら # ぼーる # # だと、 # # り # ご # ぼ # # に置換したいです。 # 置換前の正規表現と、置換後の正規表現はどのようにすればよいのでしょうか? # # マッチした文字列を、マッチした文字列の最初の一文字で置換する(_文字列,_マッチした文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,_マッチした文字列_1,S3,L1,L2,L3), 検索条件(_マッチした文字列_1), sub_atom(_マッチした文字列_1,0,1,_,_最初の一文字), concat_atom([S1,_最初の一文字,S3],_置換された文字列_1), マッチした文字列を、マッチした文字列の最初の一文字で置換する(_文字列,S1,_最初の一文字,S3,_マッチした文字列_1,_マッチした文字列,_置換された文字列_1,_置換された文字列). マッチした文字列を、マッチした文字列の最初の一文字で置換する(_文字列,_,_,_,_マッチした文字列,_マッチした文字列,_置換された文字列,_置換された文字列). マッチした文字列を、マッチした文字列の最初の一文字で置換する(_文字列,S1,_最初の一文字,S3,_,_マッチした文字列,_,_置換された文字列) :- マッチした文字列を、マッチした文字列の最初の一文字で置換する(S3,_マッチした文字列,_置換された文字列_2), concat_atom([S1,_最初の一文字,_置換された文字列_2],_置換された文字列). % 以下のサイトは # http://hibari.2ch.net/test/read.cgi/tech/1301067486/12 # ●正規表現の使用環境 # 秀丸(複数行置換) # ●検索か置換か? # 置換 # ●説明 # 上2行は条件付けの為に検索時に必要になり、置換時は style=0 のみ style=2 へ # 変更したいです。 # # ●対象データ # name=Relative # color=#000000 # style=0 # # ●希望する結果 # name=Relative # color=#000000 # style=2 # # ******************************************** # 下のようにnameとcolorは値が変わるので.*としているのですが、 # 置換文の置換時に変更しないという書き方が分かりません。 # 分かる方おりましたら教えて下さいませ。 # # [検索条件] # name=.* # color=.* # style=0 # # [置換文] # name= # color= # style=2 # # '上2行は条件付けの為に検索時に必要になり、置換時は style=0 のみ style=2 へ 変更したい'(_文字列,_変更文字列) :- \+(list(_文字列)), split(_文字列,['\n'],Liens), '上2行は条件付けの為に検索時に必要になり、置換時は style=0 のみ style=2 へ 変更したい'(Lines1,Lines2), concat_atom(Lines2,'\n',_変更文字列). '上2行は条件付けの為に検索時に必要になり、置換時は style=0 のみ style=2 へ 変更したい'(Lines1,Lines2) :- list(Lines1), append(L0,[Line1,Line2,'style=0'|R],Lines), sub_atom(Line1,0,5,_,'name='), sub_atom(Line2,0,6,_,'color='), append(L0,[Line1,Line2,'style=2'|R],Lines2), '上2行は条件付けの為に検索時に必要になり、置換時は style=0 のみ style=2 へ 変更したい'(R,Lines3), append(Lines2,Lines3,Lines),!. '上2行は条件付けの為に検索時に必要になり、置換時は style=0 のみ style=2 へ 変更したい'(_文字列,_文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1301067486/9 # # どなたかご教授ください・・・ # ●正規表現の使用環境 # EmEditor # # ●検索か置換か? # 置換 # # ●説明 # 鍵カッコ内の文字列と前方の文字列を入れ替えたい。 # # ●対象データ # AAA「BBB」/CCC「DDD」/EEE「FFF」…YYY「ZZZ」 # # ●希望する結果 # BBB「AAA」/DDD「CCC」/FFF「EEE」…ZZZ「YYY」 # # 鍵カッコ内の文字列と前方の文字列を入れ替えたい。(_文字列,_置換された文字列) :- 置換部分の確定(_文字列,S1,S2,S3,R1,R2,R3,_前文字列,_後文字列), 鍵カッコ内の文字列と前方の文字列を入れ替えたい。(_後文字列,_置換された文字列の二), concat_atom([_前文字列,_置換された文字列の二],_置換された文字列),!. 鍵カッコ内の文字列と前方の文字列を入れ替えたい。(_文字列,_文字列) :- !. 置換部分の確定(_文字列,S1,S2,S3,R1,R2,R3,_前文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,[/|R1],[「|R2],[」|R3]), \+(append(_,[」|_],R1), append([/|R2],[「|R1],[」],L0), atom_chars(_前文字列,L0), atom_chars(_後文字列,R3),!. 置換部分の確定(_文字列,S1,S2,S3,R1,R2,R3,_前文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,[「|R2],[」|R3]), \+(append(_,[」|_],R1), append(R2,[「|L1],[」],L0), atom_chars(_前文字列,L0), atom_chars(_後文字列,R3),!. % 以下のサイトは '「YYYY/MM/DD HH:MI PM」形式に一致させる'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), sPLIT(_適合文字列,['/',' ',':'],[_年,/,_月,/,_日,' ',_時,':',_分,' '_AMまたはPM]), すべて整数([_年,_月,_日,_時,_分]), \+((L3=[A|_],append(_,[A|_],['0','1','2','3','4','5','6','7','8','9']))). すべて整数([]) :- !. すべて整数([N|R]) :- integer(N), すべて整数(R). 'AMまたはPM'('AM'). 'AMまたはPM'('PM'). % 以下のサイトは '「YYYY/MM/DD HH:MI」形式に一致させる'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,後文字列,L1,L2,L3), sPLIT(_適合文字列,['/',' ',':'],[_年,/,_月,/,_日,' ',_時,':',_分]), すべて整数([_年,_月,_日,_時,_分]), \+((L3=[A|_],append(_,[A|_],['0','1','2','3','4','5','6','7','8','9']))). すべて整数([]) :- !. すべて整数([N|R]) :- integer(N), すべて整数(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/974 # # ●正規表現の使用環境 # linux コマンドラインの grep # # ●検索か置換か? # 検索 # # ●説明 # 末尾が一致していて途中が違う文字列のうち、特定のパターンを除去した集合を取得したい # # ●対象データ # aaabbbcccあああいいい # aaabbbcccううういいい # aaabbbcccえええいいい # # ●希望する結果 # aaabbbcccううういいい # aaabbbcccえええいいい # # 「説明」がうまく書けないのですが。 # よろしくお願いします # # 末尾が一致していて途中が違う文字列のうち、特定のパターンを除去した集合を取得したい(_文字列ならび,_対象文字列,_特定のパターン,_末尾部分,_特定パターンを除去した文字列ならび) :- findall(_文字列,( sub_atom(_文字列,S,_,0,_末尾部分), sub_atom(_文字列,0,S,_,_対象文字列), \+(call(_特定パターン))), _特定パターンを除去した文字列ならび). % % _特定パターン述語の引数に必ず_対象文字列を持つこと % 例えば、 削除パターン(_対象文字列) :- sub_atom(_対象文字列,_,_,_,あああ). ?- _対象データ = [aaabbbcccあああいいい,aaabbbcccううういいい,aaabbbcccえええいいい], 末尾が一致していて途中が違う文字列のうち、特定のパターンを除去した集合を取得したい(_対象データ,_対象文字列,削除パターン(_対象文字列),いいい,_特定パターンを除去した文字列ならび). _特定パターンを除去した文字列ならび = [aaabbbcccううういいい,aaabbbcccえええいいい]. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/968 # # ●正規表現の使用環境 # Perl # # ●検索か置換か? # 置換 # # ●説明 # 重複する文字列と区切り文字を削除したい # # ●対象データ # aaa;bbb;ccc;bbb;あああ;aaa;あああ;いいい # # ●希望する結果 # aaabbbcccあああいいい # # よろしくお願いします # # 重複する文字列と区切り文字を削除したい(_文字列,_重複する文字列と区切り文字を削除した文字列) :- split(_文字列,[' ',',','/',':',';'],_区切られた要素ならび), 出現順序を崩さず重複を取り除く(_区切られた要素ならび,[],_重複を取り除いた区切られた要素ならび), concat_atom(_重複を取り除いた区切られた要素ならび,_重複する文字列と区切り文字を削除した文字列). 出現順序を崩さず重複を取り除く([],L,L) :- !. 出現順序を崩さず重複を取り除く([A|R1],L1,L) :- append(_,[A|_],L1), 出現順序を崩さず重複を取り除く(R1,L1,L),!. 出現順序を崩さず重複を取り除く([A|R1],L1,L) :- append(L1,[A],L2), 出現順序を崩さず重複を取り除く(R1,L2,L),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/968 # # ●正規表現の使用環境 # Perl # # ●検索か置換か? # 置換 # # ●説明 # 重複する文字列と区切り文字を削除したい # # ●対象データ # aaa;bbb;ccc;bbb;あああ;aaa;あああ;いいい # # ●希望する結果 # aaa;bbb;ccc;あああ;いいい # # よろしくお願いします # # 区切り文字を除く重複する文字列と区切り文字を削除したい(_文字列,_区切り文字,_重複する文字列と区切り文字を削除した文字列) :- split(_文字列,[_区切り文字],_区切られた要素ならび), 出現順序を崩さず重複を取り除く(_区切られた要素ならび,[],_重複を取り除いた区切られた要素ならび), concat_atom(_重複を取り除いた区切られた要素ならび,_区切り文字,_重複する文字列と区切り文字を削除した文字列). 出現順序を崩さず重複を取り除く([],L,L) :- !. 出現順序を崩さず重複を取り除く([A|R1],L1,L) :- append(_,[A|_],L1), 出現順序を崩さず重複を取り除く(R1,L1,L),!. 出現順序を崩さず重複を取り除く([A|R1],L1,L) :- append(L1,[A],L2), 出現順序を崩さず重複を取り除く(R1,L2,L),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/958 # # XXXとYYYの間を削除したくて、 # javaで、replaceAll("XXX.*YYY", "") # このようなコードを書いてるんですが、対象が複数ある場合にうまくいきません。 # # AAAXXXBBBYYYCCCXXXDDDYYYEEE # AAACCCEEE ←このように変換したい  # AAAEEE ←こうなってしまう # # 最初のXXXと最後のYYYで認識されてしまってるようなんですが、どのようにすればよいでしょうか # # 'XXXで始まり、YYYで終わる区間を削除する。複数ヶ所ある場合はすべて削除する'(_文字列,_削除された文字列) :- sub_atom(_文字列,S,3,R,'XXX'), sub_atom(_文字列,0,S,_,_副文字列の一), 'YYYまでが削除対象'(_文字列,_残り文字列), 'XXXで始まり、YYYで終わる区間を削除する。複数ヶ所ある場合はすべて削除する'(_残り文字列,_削除された文字列の一), concat_atom([_副文字列の一,_削除された文字列の一],_削除された文字列),!. 対象が複数ある部分文字列の削除(_文字列,_文字列). 'YYYまでが削除対象'(_文字列,_残り文字列) :- sub_atom(_文字列,S,3,_残り文字数,YYY), S2 is S + 3, sub_atom(_文字列,S2,_残り文字数,_,_残り文字列),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/946 # # 16進数を2桁づつに分解する正規表現って # 例えば # '5d8ce34a7dbaab' # を # ['5d', '8c', 'e3', '4a', '7d', 'ba', 'ab'] # というリストにしたい場合 # ([0-9A-Fa-f]{2}){7} # じゃだめなんでしょうか? # # '16進数を2桁づつに分解する'('',[]) :- !. '16進数を2桁づつに分解する'(_16進文字列,[X|R]) :- sub_atom(_16進文字列,0,2,_残り長さ,X), sub_atom(_16進文字列,2,_残り長さ,_,_16進文字列の二), '16進数を2桁づつに分解する'(_16進文字列の二,R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/932 # # お知恵をお貸しください…!どうかお詳しい方よろしくお願いいたしますm(__)m # # ●正規表現の使用環境 # VBScript # # ●検索か置換か? # 検索 # # ●説明 # メールアドレスをチェックしたい # 1.メールは1つか、複数 # 2.複数メールはカンマで区切られる # 3.カンマの直後にスペースが入るかも # 4.メールの@以降は固定(間違って変な宛先に送らないため) # 5.@より前はてきとう # # つづく # # # メールアドレス検索(_文字列,_メールアドレス) :- split(_文字列,[',',' ','\n'],L), append(_,[_メールアドレス|R],L), sub_atom(_メールアドレス,_,_,_,S1,S2,S3,L1,['@'|R2],L3), R = []. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/921 # # <p>text</p> を <h3>text</h3> に変換したいんです。 # # ただし text がない<p></p>はそのままで。 # # '/<p>(.+?)<\/p>/is', '<h3>$1</h3>' # # ここから進まない… 助けて # % % 最初から順に変換していく非決定性の述語とすべてを一気に変換してしまう決定性の述語の両例を示す。 %%%%%% 最初から順に変換していく。以前に変換された部分が変換前の状態に戻ることがないように注意する %%%%% '

text

text

に変換したい'(_文字列,_変換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,['<',p,'>'|R2],L3), append(L22,['<','/',p'>'],R2), \+(append(_,['<',p,'>'|_],L22)), \+(append(_,['<',/,p,'>'|_],L22)), \+(L22=[]), append(L1,['<',h,3,'>'|L22],['<','/',h,3,'>'|L3],L4), atom_chars(_変換された文字列,L4). '

text

text

に変換したい'(_文字列,_変換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,['<',p,'>'|R2],L3), append(L22,['<','/',p'>'],R2), \+(append(_,['<',p,'>'|_],L22)), \+(append(_,['<',/,p,'>'|_],L22)), \+(L22=[]), append(L1,['<',h,3,'>'|L22],['<','/',h,3,'>'],L4), atom_chars(_変換された文字列1,L4). '

text

text

に変換したい'(S3,_変換された文字列2), concat_atom([_変換された文字列1,_変換された文字列2],_変換された文字列),!. '

text

text

に変換したい'(_文字列,_文字列). %%%%%%%%%%%%%%%%%%%% 全体を一気に変換してしまう決定性の述語 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% '

text

text

に変換したい(全置換)'(_文字列,_変換された文字列) :- '文字列の中の

text

text

に変換し、変換部分までのならびとする'(_文字列,L), concat_atom(L,_変換された文字列). '

text

text

に変換し、変換部分までのならびとする'(_文字列,[_変換された文字列|R]) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,['<',p,'>'|R2],L3), append(L22,['<','/',p'>'],R2), \+(append(_,['<',p,'>'|_],L22)), \+(append(_,['<',/,p,'>'|_],L22)), \+(L22=[]), append(L1,['<',h,3,'>'|L22],['<','/',h,3,'>'],L4), atom_chars(_変換された文字列,L4), '

text

text

に変換部分までのならびとする'(S3,R),!. '

text

text

に変換し、変換部分までのならびとする'(_文字列,[_文字列]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/908 # # ●実装しようとしている正規表現 # ^(\d{1,6})(\.\d+)?$ # # PHPのpreg_matchでいえば # preg_match (/^(\d{1,6})(\.\d+)?$/, $subject) # # ●正規表現の使用環境 # PHP 5.2 # ●検索か置換か? # 検索 # ●説明 # 整数部が6桁までの数値を許可。 # 小数点を含む入力を許可。 # 小数点以下は特に制限しない(DB側の丸め処理に依存) # # 1234567  × # 123456.  × # 123456.1 _OK # 1.1    OK # 0.12・・89 _OK # # ●対象データ # 説明の項を参照 # ●希望する結果 # 説明の項を参照 # '整数部が6桁までの数値を許可。小数点を含む入力を許可。小数点以下は特に制限しない(DB側の丸め処理に依存)'(_文字列,_前文字列,_検索文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_検索文字列,後文字列,L1,L2,L3), 許可される文字だけで構成(L2), 最初と最後は数字でなくてはならない(L2), 検索文字列の前後は数字ではない(L1,L3), 整数部が6桁まで(L2). 許可される文字だけで構成(L2) :- append(_,[A|_],L2), \+(検索文字列で許可される文字(A)),!,fail. 許可される文字だけで構成(_). 検索文字列で許可される文字(A) :- digit(A),!. 検索文字列で許可される文字('.'). 最初と最後は数字でなくてはならない(L2) :- L2 = [H|_], digit(H), last(L2,LZ), digit(LZ). 検索文字列の前後は数字ではない(L1,L3) :- \+((last(L1,Z),digit(Z))), \+((L3=[H|_],digit(H))). 整数部が6桁まで(L) :- append(L0,['.'|R],L), ピリオドは一個まで(L0,R), '6桁以下'(L0). 整数部が6桁まで(L) :- '6桁以下'(L). ピリオドは一個まで(L0,R) :- \+(append(_,['.'|_],L0)), \+(append(_,['.'|_],R)). '6桁以下'(L0) :- length(L0,Len), Len =< 6,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/906 # # ●実装しようとしている正規表現 # ^[0][1-9]$|^[1-9]\d$ # # PHPのpreg_matchでいえば # preg_match (/^[0][1-9]$|^[1-9]\d$/, $subject) # # ●正規表現の使用環境 # PHP 5.2 # ●検索か置換か? # 検索 # ●説明 # 2桁の月で00のみを除外したい。 # # 00   × # 01〜12 OK(13〜99は他の方法で除外しています) # # ●対象データ # 説明の項を参照 # ●希望する結果 # 説明の項を参照 # # # '2桁の月で00のみを除外したい'(_文字列,_前文字列,_検索文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_検索文字列,後文字列,L1,[A,B],L3), digit(A), digit(B), \+((A='0',B='0')), \+((last(L1,Z),digit(Z))), \+((L3=[H|_],digit(H))). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/905 # # ●実装しようとしている正規表現 # ^[1-9]\d{3}$ # # PHPのpreg_matchでいえば # preg_match (/^[1-9]\d{3}$/, $subject) # # ●正規表現の使用環境 # PHP 5.2 # ●検索か置換か? # 検索 # ●説明 # 4桁の西で0000のみを除外したい。 # 西暦1万年(10000)以上は考慮しない # # 0000 × # 1000〜9999 ○ # # ●対象データ # 説明の項を参照 # ●希望する結果 # 説明の項を参照 # # # '4桁の西暦で0000のみを除外したい'(_文字列,_前文字列,_検索文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_検索文字列,後文字列,L1,[A,B,C,D],L3), digit(A), digit(B), digit(C), digit(D), \+((A='0',B='0',C='0',D='0')), \+((last(L1,Z),digit(Z))), \+((L3=[H|_],digit(H))). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/889 # # 例えばダブルクォーテーションで括った部分が文字列とする場合は # 単に/"[^"]*"/でマッチできるけど、文字列以外の部分をマッチさせるには # どうすればいい # 例えばダブルクォーテーションで括った部分が文字列とする場合に、文字列以外の部分をマッチさせる('',[]) :- !. 例えばダブルクォーテーションで括った部分が文字列とする場合に、文字列以外の部分をマッチさせる(_文字列,[S1|R]) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,['"'|R2],['"'|R3]), \+(append(_,['"'|_],R2)), atom_chars(S4,R3), 例えばダブルクォーテーションで括った部分が文字列とする場合に、文字列以外の部分をマッチさせる(S4,R),!. 例えばダブルクォーテーションで括った部分が文字列とする場合に、文字列以外の部分をマッチさせる(_文字列,[_文字列]). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/865 # # 質問させてください。 # 「<img」以外の「<」を「&lt;」に置き換えるにはどう書けば良いでしょうか? # #「img(中略)>」以外の「>」も「&gt;」に置き換える必要ありがますが、そちらはまた別途考えるとして。。 # 言語はPHPです。よろしくお願いします。 # '「|R3]), '「|R3],_置換した部分までの文字列,_残り文字列), concat_atom([_置換した部分までの文字列,_残り文字列],_置き換えた文字列). '「|R3]), '「|R3],_置換した部分までの文字列,_残り文字列) :- \+(append(_,[<|_],R2)), \+(append(_,[>|_],R2)), append(L1,['<'|R2],['>'],L4), concat_atom(L4,_置換した部分までの文字列), concat_atom(R3,_残り文字列),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/831 # % % % 常に置換可能な部分のうち一箇所だけが置換される述語定義です。 % % % 対象文字列がccで文字列中にcが3個以上連なっている場合などは % 最初のccの切り出しの後、そのccを除外して置換対象を探すか、 % あるいは最初のcの次のc以後を置換対象とするかの選択が有り得ます。 % % 以下は後者、一旦対象になった文字列に重なって次の対象文字列を % 探す場合の述語定義です。 % % この定義はどこが置換されたか分かりにくいのが欠点です。 % 'ひとつだけ置換(対象文字列の重なりを許す)'(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- sub_atom(_文字列,Len1,Len2,Len3,_置換対象文字列), sub_atom(_文字列,0,Len1,_,S1), St is Len1+Len2, sub_atom(_文字列,St,Len3,_,S3), concat_atom([S1,_置換文字列,S3],_置換された文字列). % 以下のサイトは % % 常に置換可能な部分のうち一箇所だけが置換される述語定義です。 % % 対象文字列がccで文字列中にcが3個以上連なっている場合などは % 最初のccの切り出しの後、そのccを除外して置換対象を探すか、 % あるいは最初のcの次のc以後を置換対象とするかの選択が有り得ます。 % % 以下は前者、一旦置換対象になった文字列を外して、そのあとからの % 文字列から次の置換対象文字列を探す場合の述語定義です。 % % この定義はどこが置換された場所であるか、分かりにくいのが欠点です。 % '常に置換可能な部分のうち一箇所だけが置換される。'(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- '常に置換可能な部分のうち一箇所だけが置換される。 置換対象文字列があれば全て書き換える'(_文字列,_置換対象文字列,_置換文字列,_置換された文字列),!. '常に置換可能な部分のうち一箇所だけが置換される'(_文字列,_,_,_文字列). '常に置換可能な部分のうち一箇所だけが置換される。 置換対象文字列があれば全て書き換える'(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- 置換対象文字列を得る(_文字列,_置換対象文字列,_前文字列,_後文字列), '常に置換可能な部分のうち一箇所だけが置換される'(_後文字列,_置換対象文字列,_置換文字列,_置換された文字列_2), atomic_list_concat([_前文字列,_置換文字列,_置換された文字列_2],_置換された文字列). 置換対象文字列を得る(_文字列,_置換対象文字列,_前文字列,_後文字列) :- sub_atom(_文字列,S,_,R,_置換対象文字列), sub_atom(_文字列,0,S,_,_前文字列), sub_atom(_文字列,_,R,0,_後文字列),!. % 以下のサイトは % % 文字列の置換述語。最初に見つかった置換可能部分を置換する決定性述語。 % % どこが置換された部分であるか、分かりにくいのが欠点です。 % % 最初のひとつだけ置換/6 は置換された部分の前文字列と後文字列を明示した。 最初のひとつだけ置換(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- sub_atom(_文字列,Len1,Len2,Len3,_置換対象文字列), sub_atom(_文字列,0,Len1,_,S1), St is Len1+Len2, sub_atom(_文字列,St,Len3,_,S3), concat_atom([S1,_置換文字列,S3],_置換された文字列),!. 最初のひとつだけ置換(_文字列,_置換対象文字列,_前文字列,_置換文字列,_後文字列,_置換された文字列) :- sub_atom(_文字列,Len1,Len2,Len3,_置換対象文字列), sub_atom(_文字列,0,Len1,_,_前文字列), St is Len1+Len2, sub_atom(_文字列,St,Len3,_,_後文字列), concat_atom([_前文字列,_置換文字列,_後文字列],_置換された文字列),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/831 # % % ひとつひとつ置換は置換対象文字列をひとつひとつ順に置換していく、 % 非決定性の述語です。 % 一度置換された部分は次の置換候補が置換された時にも置換されたままであり、 % 元に戻ることはありません。 % 置換される対象がなくなって、さらのバックトラックにより、起動されると僞となります。 % % ひとつひとつ置換/6 は置換される度に、前文字列、後文字列を切り出す。 % 置換文字列の引数位置に注意が必要。 % ひとつひとつ置換(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- sub_atom(_文字列,Len1,Len2,Len3,_置換対象文字列), sub_atom(_文字列,0,Len1,_,S1), \+(sub_atom(S1,_,Len2,_,_置換対象文字列)), St is Len1+Len2, sub_atom(_文字列,St,Len3,_,S3), concat_atom([S1,_置換文字列,S3],_置換された文字列). ひとつひとつ置換(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- sub_atom(_文字列,Len1,Len2,Len3,_置換対象文字列), sub_atom(_文字列,0,Len1,_,S1), \+(sub_atom(S1,_,Len2,_,_置換対象文字列)), St is Len1+Len2, sub_atom(_文字列,St,Len3,_,S3), concat_atom([S1,_置換文字列],_置換された文字列1), ひとつひとつ置換(S3,_置換対象文字列,_置換文字列,_置換された文字列2), concat_atom([_置換された文字列1,_置換された文字列2],_置換された文字列). ひとつひとつ置換(_文字列,_置換対象文字列,__前文字列,_置換文字列,_後文字列,_置換された文字列) :- sub_atom(_文字列,Len1,Len2,Len3,_置換対象文字列), sub_atom(_文字列,0,Len1,_,_前文字列), \+(sub_atom(_前文字列,_,Len2,_,_置換対象文字列)), St is Len1+Len2, sub_atom(_文字列,St,Len3,_,_後文字列), concat_atom([S1,_置換文字列,S3],_置換された文字列). ひとつひとつ置換(_文字列,_置換対象文字列,__前文字列,_置換文字列,_後文字列,_置換された文字列) :- sub_atom(_文字列,Len1,Len2,Len3,_置換対象文字列), sub_atom(_文字列,0,Len1,_,_前文字列1), \+(sub_atom(_前文字列1,_,Len2,_,_置換対象文字列)), St is Len1+Len2, sub_atom(_文字列,St,Len3,_,_残り文字列), ひとつひとつ置換(_残り文字列,_置換対象文字列,_前文字列2,_置換文字列,_後文字列,_置換された文字列2), concat_atom([_前文字列1,_置換文字列,_前文字列2],_前文字列), concat_atom([_前文字列,_置換文字列,_後文字列],_置換された文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/831 # % % 文字列に対して、置換対象部分すべてを置換します。 % 置換対象となる文字列が見つからなかった時でも、僞にはなりません。 % % ひとつひとつ置換は置換対象文字列を最初からひとつひとつ順に置換して行きます。 % 全置換(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- findall(S,( ひとつひとつ置換(_文字列,'c++','c#',S)), L), last(L,_置換された文字列),!. 全置換(_文字列,_,_,_文字列). ひとつひとつ置換(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- sub_atom(_文字列,Len1,Len2,Len3,_置換対象文字列), sub_atom(_文字列,0,Len1,_,S1), \+(sub_atom(S1,_,Len2,_,_置換対象文字列)), St is Len1+Len2, sub_atom(_文字列,St,Len3,_,S3), concat_atom([S1,_置換文字列,S3],_置換された文字列). ひとつひとつ置換(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- sub_atom(_文字列,Len1,Len2,Len3,_置換対象文字列), sub_atom(_文字列,0,Len1,_,S1), \+(sub_atom(S1,_,Len2,_,_置換対象文字列)), St is Len1+Len2, sub_atom(_文字列,St,Len3,_,S3), concat_atom([S1,_置換文字列],_置換された文字列1), ひとつひとつ置換(S3,_置換対象文字列,_置換文字列,_置換された文字列2), concat_atom([_置換された文字列1,_置換された文字列2],_置換された文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/831 # # 質問です # C++をC#にするにはどうすればよいですか # # 'C++をC#にするには'(_文字列,_置換された文字列) :- 全置換(_文字列,'c++','c#',_置換された文字列). 全置換(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- findall(S,( ひとつひとつ置換(_文字列,'c++','c#',S)), L), last(L,_置換された文字列),!. 全置換(_文字列,_,_,_文字列). ひとつひとつ置換(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- sub_atom(_文字列,Len1,Len2,Len3,_置換対象文字列), sub_atom(_文字列,0,Len1,_,S1), \+(sub_atom(S1,_,Len2,_,_置換対象文字列)), St is Len1+Len2, sub_atom(_文字列,St,Len3,_,S3), concat_atom([S1,_置換文字列,S3],_置換された文字列). ひとつひとつ置換(_文字列,_置換対象文字列,_置換文字列,_置換された文字列) :- sub_atom(_文字列,Len1,Len2,Len3,_置換対象文字列), sub_atom(_文字列,0,Len1,_,S1), \+(sub_atom(S1,_,Len2,_,_置換対象文字列)), St is Len1+Len2, sub_atom(_文字列,St,Len3,_,S3), concat_atom([S1,_置換文字列],_置換された文字列1), ひとつひとつ置換(S3,_置換対象文字列,_置換文字列,_置換された文字列2), concat_atom([_置換された文字列1,_置換された文字列2],_置換された文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/702 # # 次の正規表現でhogeフォルダ以下の最後の「/」の後に「i/」が挟まるようにURLを変換しております。 # # RewriteRule ^/hoge(.*)/(.*).html$ http://ime.nu/example.com/hoge/$1/i/$2.html [L] # # # # 下記のような場合は問題ないのですが # # http://ime.nu/example.com/hoge → http://ime.nu/example.com/hoge/i/ # http://ime.nu/example.com/hoge/saitama/2011/01/index.html → http://ime.nu/example.com/hoge/saitama/2011/01/i/index.html # # # # ↓のようにhogeで始まるディレクトリまでも変換されてしまいます。 # http://ime.nu/example.com/hogehoge/kankeinai.html # # hogeフォルダ配下のみ変換されるようにするには、どうしたらいいでしょうか? # # 環境は # CentOS5 # Apache2 # # # 'hogeフォルダ以下の最後の「/」の後に「i/」が挟まるようにURLを変換する'(_文字列,_変換された文字列) :- sud_atom(_文字列,_,_,_,S1,'/hoge',S3,L1,L2,L3), L3=[], concat_atom([S1,S2,'/i/'],_変換された文字列),!. 'hogeフォルダ以下の最後の「/」の後に「i/」が挟まるようにURLを変換する'(_文字列,_変換された文字列) :- sud_atom(_文字列,_,_,_,S1,'/hoge',S3,L1,L2,[' '|R3]), concat_atom([S1,S2,'/i/',S3],_変換された文字列),!. 'hogeフォルダ以下の最後の「/」の後に「i/」が挟まるようにURLを変換する'(_文字列,_変換された文字列) :- sud_atom(_文字列,_,_,_,S1,'/hoge/',S3,L1,L2,[' '|R3]), concat_atom([S1,S2,'i/',S3],_変換された文字列),!. 'hogeフォルダ以下の最後の「/」の後に「i/」が挟まるようにURLを変換する'(_文字列,_変換された文字列) :- sud_atom(_文字列,_,_,_,S1,'/hoge/',S3,L1,L2,L3), '最後の「/」の後に「i/」が挟まるように'(S3,S4), concat_atom([S1,S2,S4],_変換された文字列). '最後の「/」の後に「i/」が挟まるように'(S1,S2) :- atom_chars(S1,L), append(L0,['/'|R],L), \+(append(_,[' '|_],L0)), \+(append(_,['/'|_],R)), append(L0,['/i/'|R],L2), atom_chars(S2,L2),!. '最後の「/」の後に「i/」が挟まるように'(S1,S2) :- concat_atom(['i/',S1],S2),). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/833 # # ●正規表現の使用環境 # C # # ●説明 # Apacheのログから一部分を抜き出して検索したい # # ●対象データ # host.ne.jp - - [11/May/2011:12:22:15 +0900] "GET /~akasata/index.xml?gat=tPFnlVCP8aUYq8jjPqA=&BSdebug=AV/w3.3r1.1/ HTTP/1.1" # 200 6703 "https://server.ne.jp/" "Mozilla/5.0 (X11; U; Linux i686; ja; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14" # (以上1行) # ●希望する結果 # 1件目 # host.ne.jp # 2件目 # /~akasata/index.xml # # 以上のような検索を実装しようとして、 # regerror(regcomp(&preg, "(.+) - [^[] \\[.+\\] \"[^\" ]+ ((/~akasata/[^\"]+)\\?g.+)*([^\"]+) [^\" ]+\".+", REG_EXTENDED|REG_NEWLINE), &preg, errbuf, sizeof(errbuf)); # 以下のような正規表現を用いた(Cのエスケープが混じっているため見辛ければすいません)のですが、 # 後ほど検索対象を調べて一部不要な部分があったため # regerror(regcomp(&preg, "(.+) - [^[] \\[.+\\] \"[^\" ]+ ((/~akasata/[^\"]+)\\?g.+) [^\" ]+\".+", REG_EXTENDED|REG_NEWLINE), &preg, errbuf, sizeof(errbuf)); # 以下のように正規表現を変更したところ、同じ結果を返すのにもかかわらず # 実行速度が4倍以上もかかるようになってしまいました。原因かわかる方教えていただけないでしょうか? # # 'Apacheのログから一部分を抜き出して検索したい'(ApacheLog,X) :- get_split_lines(ApacheLog,[' ','"','?'],LL), append(_,[L|R],LL), 選択(L,X). 選択(L,X) :- append(_,['GET',X|_],L). 選択(L,X) :- append(_,[X|_],L), sub_atom(X,0,4,_,http). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/828 # # 質問です # <html><body>abcdefg</body></html>のように間に挟まれたabcdefgだけを取り出すには # やはり # <html><body>(?<label>(\\w+))</body></html> # のようにグループ化を行って後から # Groups["label"].Valueで取り出すのがスマートな方法ですか? # # C#です # # 実際はもっと長い文字列から抽出します # 何かもっといいアイディアがありましたらご教授願います # # 'ある文字パターンに挟まれた副文字列'(_文字列,_直前にある副文字列,_直後にある文字列,_前文字列,_検索語,_後文字列) :- atom_chars(_直前にある副文字列,Chars1), atom_chars(_直後にある副文字列,Chars2), sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), append(Chars1,L11,Chars2,L1), concat_atom(L11,_検索語), concat_atom([S1,_直前にある副文字列],_前文字列), concat_atom([_直後にある副文字列,S3],_後文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/819 # # 正規表現の使用環境は秀丸です。 # やりたいことは置換で、VBのソースを編集したいのが目的です。 # # 例: # ・Before # Dim s1, s2, s3 As String # # ・After # Dim s1 As String, s2 As String, s3 As String # # 上記のように、1行で複数の変数宣言を行っている箇所で # 型の宣言を省略している箇所を、最後の型宣言で補いたいのですが # どのように指定してやればよいでしょうか? # # '型の宣言を省略している箇所を、最後の型宣言で補う'(_文字列,_補正された文字列) :- 's1, s2, S3 の認識'(_文字列,_型宣言部分,_変数部分ならび,_型部分), findall(W,( append(_,[_変数|_],_変数部分ならび), concat_atom([_変数,_型部分],W)), L2), concat_atom(L2,',',S5), concat_atom(_型宣言部分,S5,_補正された文字列). 's1, s2, S3 の認識'(_文字列,_型宣言部分,_変数部分ならび,_型部分) :- split(_文字列,[','],[_第一要素|R1]), sPLIT(_第一要素,[' '],L1), append(L0,[A],L1), concat_atom(L0,_型宣言部分), append(L2,[U],R1), sPLIT(U,[' '],L3), '最後の変数と型部分に分離する'(L3,Z,_型部分), append([A],L2,[Z],_変数部分ならび),!. '最後の変数と型部分に分離する'(L,S,_型部分) :- append(L0,[_最後の変数|R],L), \+(A = ' '), all(L0,' '), concat_atom(R,_型部分),!. '最後の変数と型部分に分離する'([_最後の変数|R],_最後の変数,_型部分) :- concat_atom(R,_型部分),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/802 # # Abc_def, Ghi_jkl ,Mno_pqr # という文章を、 # AbcDef, GhiJkl ,MnoPqr # に変えたいのですが、どのような正規表現を書けばいいでしょうか? # # 'Abc_def, Ghi_jkl ,Mno_pqr という文章を、AbcDef, GhiJkl ,MnoPqr に変える'(_文字列,_変換された文字列) :- atom_chars(_文字列,Chars), 変換(Chars,Chars2), atom_chars(_変換された文字列,Chars2). 変換([],[]) :- !. 変換(['_',A|R1],[B|R2]) :- to_upper(A,B), 変換(R1,R2),!. 変換([A|R1],[A|R2]) :- 変換(R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/675 # # 質問です。PHP5.3でpreg_matchを使っているのですが、例えば # 「次章(第20条の3、第1節の3、・・・除き、建築基準法第80条の2にあっては・・・」 # という文章より法律名称や条などをwhileループで拾い上げたいのですが、 # '「次章(第20条の3、第1節の3、・・・除き、建築基準法第80条の2にあっては・・・」という文章より法律名称や条などをwhileループで拾い上げたい'(_文,_法律名称や条のならび) :- 法律名称を拾う(_文,0,_開始位置付き法律名称ならび), 条を拾う(_文,_開始位置付き条ならび), 法律名称と条を出現順にならびとする(_開始位置付き条ならび,_法律名称や条ならび). 法律名称を拾う(_文,_開始位置,[[_開始位置1,S2]|R]) :- sub_atom(_文,_相対開始位置,_長さ,_,S1,S2,S3,L1,L2,L3), sub_atom(S2,_,1,0,法), 法律名称(S2), _開始位置1 is _開始位置 + _相対開始位置, _開始位置2 is _開始位置 + _相対開始位置 + _長さ, 法律名称を拾う(S3,_開始位置2,R),!. 条を拾う(_文,[[_開始位置1,S2]|R]) :- sub_atom(_文,_相対開始位置,_長さ,_,S1,S2,S3,L1,L2,L3), sub_atom(S2,0,1,_,第), sub_atom(S2,_,1,0,条), _開始位置1 is _開始位置 + _相対開始位置, _開始位置2 is _開始位置 + _相対開始位置 + _長さ, 条を拾う(S3,_開始位置2,R). 法律名称と条を出現順にならびとする(_開始位置付き法律名称ならび,_開始位置付き条ならび,_法律名称や条ならび) :- append(_開始位置付き法律名称ならび,_開始位置付き条ならび,L1), sort(L1,L2), findall(_法律名称または条,( append(_,[[_,_法律名称や条]|_],L2)), _法律名称や条ならび). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/673 # # # 仕上げたコードの可読性をあげるために # 演算子の前後にスペースを入れたいです # 例 x+y=z #   x + y = z # 式文字列の演算子の前後に空白を入れる(_式文字列,_空白を挿入して可読性を上げた式文字列) :- 空白を一旦取り除く(_式文字列,_空白を取り除いた式文字列), sPLIT(_空白を取り除いた式文字列,['=','+','-','*','/','mod','(',')'],L), concat_atom(L,' ',_空白を挿入して可読性を上げた式文字列). 空白を一旦取り除く(_式文字列,_空白を取り除いた式文字列) :- split(_式文字列,[' '],L), concat_atom(L,_空白を取り除いた文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/669 # # php5で、tableタグ内の改行(<br />)を全て削除したいのです。 # どうしたら良いんでしょう。 # # ●置換前 # <table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx"><br /> # <tbody><br /> # <tr><br /> # <td><br /> # </td><br /> # </tr><br /> # </tbody><br /> # </table> # # ●置換後 # <table border="1" cellpadding="5" cellspacing="0" class="xx" id="xx"> # <tbody> # <tr> # <td> # </td> # </tr> # </tbody> # </table> # # 'br/タグを削除する'(Lines,Lines2) :- findall(Line2,( append(L0,[Line|R],Lines), '行末のbr / タグを削除する'(Line,Line2)), Lines2). '行末のbr / タグを削除する'(Line,Line2) :- sub_atom(Line,S,6,0,'
'), sub_atom(LIne,0,S,_,Line2),!. '行末のbr / タグを削除する'(Line,Line). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/666 # # メールアドレスが正しいかマッチング。 # ただし、@gmail.com、@googlemail.com、@livedoor.comの場合は # @の前に「+」「.」が含まれている場合は除外する。 # これって正規表現1発でできたりしますか? # # チェック対象ドメイン('gmail.com'). チェック対象ドメイン('googlemail.com'). チェック対象ドメイン('livedoor.com'). メールアドレスチェック(_メールアドレス) :- split(_メールアドレス,['@'],[A,B]), メールアドレスチェック(A,B). メールアドレスチェック(A,B) :- \+(チェック対象ドメイン(B)),!. メールアドレスチェック(A,B) :- \+(sub_atom(A,_,1,_,'+')),!. メールアドレスチェック(A,B) :- \+(sub_atom(A,_,1,_,'.')),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/659 # # PHPで、例えば # # こう言った文章を考えるのは、たのしい。 # わたしは、「こんにちは」と言いました。 # 「この文章は、なかなか面白いですね。とても正確な正規表現を考える必要があるんです。」 # 「では、そんな正規表現をどうやって見つけるのでしょうか?そうだ、質問してみましょうよ!。」 # 「なるほど?。それは面白いアイディアだ。」と、もう一人は言った。 # # という文章があったときに、 # # "こう言った文章を考えるのは、たのしい。", # "わたしは、","「こんにちは」","と言いました。", # "「この文章は、なかなか面白いですね。","とても正確な正規表現を考える必要があるんです。」", # "「では、そんな正規表現をどうやって見つけるのでしょうか?","そうだ、質問してみましょうよ!。」", # "「なるほど?。","それは面白いアイディアだ。」","と、もう一人は言った。" # # という感じに分割して配列にしたいと思っています。 # 現在使っている正規表現は # $contents = array(); # preg_match_all('/.*?。|.*?「/m',$content,$contents); # という感じで書いてみました。 # $contentがもとの文章で、$contentsが新しく得る配列です。 # どうも複雑でどうしたら良いのかわからないので質問させていただきます。よろしくお願いします。 # # 文を改行区切りとするならびとする(_文,_行ならび) :- split(_文,['\n'],_行ならび). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/661 # # 正規表現での重複行の削除について # 質問させてください # # みかん   みかん # みかん   (空白行) # りんご → りんご # なし    なし # なし    (空白行) # なし    (空白行) # かき    かき # # というかんじで # 重複行は空白のままで残したいのですが # どうすべきでしょうか? # # 重複行を削除するのではなく空白行として残す(Lines,Lines2) :- findall(_行2,( append(L0,[_行|R],Lines), append(_,[_行|_],L0), 重複行場合だけ空行を返す(L0,_行,_行2)), Lines2). 重複行場合だけ空行を返す(L0,_行,'') :- append(_,[_行|_],L0),!. 重複行場合だけ空行を返す(_,_行,_行). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/642 # # Perl 5.8 /5.10で使用します。 # # HTMLソースの中のimgタグのファイル名を正規表現などで一括で変えたいです。 # # <img src="http://ime.nu/www.hoge.com/aaa/bb/ccc/ddd.jpg" alt="sss"> # <img src="/xxx/yyy.png"> # <img src="../aaa/fff/xxx/ccc.gif" width="32" height="16"> # #            ↓ # # <img src="/images/ddd.jpg" alt="sss"> # <img src="/images/yyy.png"> # <img src="/images/ccc.gif" width="32" height="16"> # # こんな感じです。どの様にしたらよいでしょうか。 # 'imgタグの書き換え'(Lines,_置換されたLines) :- findall(_置換された文字列,( append(_,[_文字列|_],Lines), 文字列の置換(_文字列,_置換された文字列)), _置換されたLines). 文字列の置換(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), L2 = [<,i,m,g,' ',s,r,c,=,'"'|R2], L3 = [>|R3], \+(append(_,[>|_],R2)), concat_atom(R2,S22), split(S22,['/'],L), last(L,F), concat_atom([S1,'% 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/640 # # 現在、HTMLのimgタグを使って「/img/jpg/」ディレクトリにある画像ファイルを複数表示しています。 # # 例) # <img src="/img/jpg/1111.jpg" > # <img src="/img/jpg/mm2222.jpg" > # <img src="/img/jpg/kkkkk3333.jpg" > # # これをそれぞれ、以下のように置換したいと考えています。 # 例) # <a href="http://ime.nu/www.xxxxx.jp/1111.jpg"><img src="/img/jpg/1111.jpg" width="240px"></a> # <a href="http://ime.nu/www.xxxxx.jp/mm2222.jpg"><img src="/img/jpg/mm2222.jpg" width="240px"></a> # <a href="http://ime.nu/www.xxxxx.jp/kkkkk3333.jpg"><img src="/img/jpg/kkkkk3333.jpg" width="240px"></a> # # imgタグをリンクタグで囲むのですが、リンク先URLには元々の画像ファイル名が使われています。また、imgタグには「width="240px"」が付加されています。 # # このような置換をPHP5で行うには、どのような正規表現を使用したらよろしいでしょうか。 # 宜しくお願い致します。 # # 'imgタグをaタグ+imgタグに書き換える'(Lines,_置換されたLines) :- findall(_置換された文字列,( append(_,[_文字列|_],Lines), 文字列の置換(_文字列,_置換された文字列)), _置換されたLines). 文字列の置換(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), L2 = [<,i,m,g,' ',s,r,c,=,'"',/,i,m,g,/,j,p,g,/|R2], L3 = [>|R3], \+(append(_,[>|_],R2)), concat_atom(R2,S22), concat_atom([S1,' '|R3],_置換された文字列),!. 文字列の置換(_文字列,_文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/775 # # 『プリンターがあります。これはプリンタです。プリンタを使います。プリンターの変更です。』 # という文がある時、文中のプリンタをプリンターになおすにはどのような正規表現を # 用いればよいでしょうか? # '『プリンターがあります。これはプリンタです。プリンタを使います。プリンターの変更です。』という文がある時、文中のプリンタをプリンターになおす' :- atom_chars('プリンターがあります。これはプリンタです。プリンタを使います。プリンターの変更です。',Chars1), 'プリンタをプリンターに変換'(Chars1,Chars2), atom_chars(_変換した文字列,Chars2). 'プリンタをプリンターに変換'([],[]) :- !. 'プリンタをプリンターに変換'([プ,リ,ン,タ,ー|R1],[プ,リ,ン,タ,ー|R2]) :- 'プリンタをプリンターに変換'(R1,R2),!. 'プリンタをプリンターに変換'([プ,リ,ン,タ|R1],[プ,リ,ン,タ,ー|R2]) :- 'プリンタをプリンターに変換'(R1,R2),!. 'プリンタをプリンターに変換'([A|R1],[A|R2]) :- 'プリンタをプリンターに変換'(R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/760 # # ●正規表現の使用環境 # C# # # ●検索か置換か? # 検索 # # ●説明 # =の連続がある行で挟まれた部分を抽出したい # # ●対象データ # ゲスト======================== # ほげほげ # ほげほげほげ # プロフィール=================== # はげ # はげはげ # ============================= # # ●希望する結果 # "ほげほげ\nほげほげほげ" # "はげ\nはげはげ" # # 結果に=の行が含まれていても構いません # =は2つ以上連続している行が対象です # # ^.*={2,}$(?'block'.+?)^.*={2,}$ とやってみましたがマッチしませんでした # MultiLineオプションは指定しています # それと対象文字列から\rは事前に除去しています # # よろしくお願いします # # '=の連続がある行を区切りとして検索する'([],[]) :- !. '=の連続がある行を区切りとして検索する'([Line|R1],[S|R2]) :- sub_atom(Line,_,2,_,'=='), '=の連続がある行が来るまで検索する'(R1,L1,R11), concat_atom(L1,'\n',S), '=の連続がある行を区切りとして検索する'(R11,R2). '=の連続がある行を区切りとして検索する'([_|R1],R2) :- '=の連続がある行を区切りとして検索する'(R1,R2). '=の連続がある行が来るまで検索する'([Line|R1],[],[Line|R1]) :- sub_atom(Line,_,2,_,'=='),!. '=の連続がある行が来るまで検索する'([Line|R1],[Line|R2],R3) :- '=の連続がある行が来るまで検索する'(R1,R2,R3). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/632 # # 質問させてください。 # # <table> # <tr> # <th>名称1</th> # <td> # 値1 # </td> # </tr> # <tr> # <th>名称2</th> # <td> # 値2 # </td> # </tr> # </table> # のようなHTMLがあります。 # 実際には全ての改行とインデントはトリムされてます。 # この値1の部分をとるにはどのような正規表現を使えば良いでしょうか? # # <th>名称1</th><td>([^<]*)</td> # のように考えてましたが値1には<img>タグが入る場合があります。 # <table>や<td>が入ることはありません。 # '最初のtdタグの値を検索する'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,_後文字列,L1,['<',t,d,'>'|R2],['<',/,t,d,'>'|R3]), \+(append(_,['<',t,d,'>'],_,R2)), concat_atom([S1,'
'],_前文字列), concat_atom(R2,_適合文字列),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/630 # # 質問させてください! # # ああああああ @ ABCD @ abcd # # という文字を # # <b>ああああああ</b> @ ABCD @ <em>abcd</em> # # のように置換したい時はどういう正規表現を使えばいいのでしょうか? # # よろしくお願いいたします # # 'ああああああ @ ABCD @ abcd という文字を <b>ああああああ</b> @ ABCD @ <em>abcd</em> のように置換したい'(_文字列,_置換された文字列) :- sPLIT(_文字列,' @ ',[A,B,C]), concat_atom(['',A,'',' @ ',B,' @ ','',C,''],_置換された文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/613 # # MySQLダンプ内の # # /*------------------ここから--------------------*/ # DROP TABLE IF EXISTS `table100`; # /*!40101 SET @saved_cs_client = @@character_set_client */; # /*!40101 SET character_set_client = utf8 */; # CREATE TABLE `table100` ( # `code1` varchar(5) default NULL, # `zip1` varchar(7) default NULL, # `address1` varchar(250) default NULL, # `address2` varchar(250) default NULL, # `div_1` varchar(1) default NULL, # `div_2` varchar(1) default NULL, # `import_date` timestamp NULL default NULL, # `rec_key1` int(10) unsigned NOT NULL auto_increment, # PRIMARY KEY (`rec_key1`) # ) ENGINE=InnoDB AUTO_INCREMENT=121471 DEFAULT CHARSET=eucjpms; # /*!40101 SET character_set_client = @saved_cs_client */; # /*------------------ここまで--------------------*/ # # `table100` → `TABLE100` # `code1` → `CODE1` # など逆クォートで囲まれた小文字→大文字変換を一括で行いたいです。。 # できればlinux コマンドライン、perl などでお願いします。。 # '逆クォートで囲まれた小文字-大文字変換を一括で行いたい'(_文字列,_変換した文字列) :- sub_atom(_文字列,St,Len,_,S1,S2,S3,L1,['`'|R2],['`'|R3]), \+(append(_,['`'|_],R2)), concat_atom(R2,S22), to_upper(S22,_大文字化した文字列), concat_atom(S1,'`',_大文字化した文字列,'`'],_変換した文字列1), concat_atom(R3,_残り文字列), '逆クォートで囲まれた小文字-大文字変換を一括で行いたい'(_残り文字列,_変換した文字列2), atom_concat(_変換した文字列1,_変換した文字列2,_変換した文字列),!. '逆クォートで囲まれた小文字-大文字変換を一括で行いたい'(_文字列,_文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/600 # # 文字列の中にある¥を除去したかったのですが、preg_replace('/¥/')や # preg_replace('/¥¥/')では削除できなかったのですが、preg_replace('/¥¥¥/')だと削除できました・・・ # これはなぜでしょうか。 # ¥は次に有る文字をエスケープするわけですから、preg_replace('/¥¥/')でいけそうな気がするのですが。。。 # 正規表現初心者につき、低レベルですがご教授よろしくお願いいたします。 # (上記は、あえて半角ではなく、全角の¥で説明しています。) # 文字列の中にある¥を除去する(_文字列,_¥を除去した文字列) :- findall(A,( sub_atom(_文字列,_,1,_,A), \+(A='\\')), L), concat_atom(L,_¥を除去した文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1268979408/755 # # すいません。行頭のスペースが消えておかしくなりましたので書き込み直します。 # # ●正規表現の使用環境 # Java1.6 # # ●検索か置換か? # 検索(Stringクラス String[] split(String regex)メソッドによる文字列分割) # # ●説明 # CSVファイル中の一行を対象文字列とし、 # その文字列中初出の\s*,\s*をデータ区切り子として見なしマッチさせる。 # (その前後で文字列を2つに分割) # # ●対象データ # aaa,bbb,ccc # aaa, bbb, ccc # aaa , bbb , ccc # # ●希望する結果 # "aaa"と"bbb,ccc"に分割 # "aaa"と"bbb, ccc"に分割 # "aaa"と"bbb , ccc"に分割 # # ●希望しない結果 # "aaa"と"bbb"と"ccc"に分割 # etc... # # 自分で考えた(?<^[^,]*)\s*,\s*では # java.util.regex.PatternSyntaxException: Unknown look-behind group near index 8 # というような例外が出てしまいました。 # # よろしくお願いします。 # # 'CSVファイル中の一行を対象文字列とし、その文字列中初出の\\s*,\\s*をデータ区切り子として見なし分割する'(_csvファイル,_行,_前文字列,_後文字列) :- get_lines(_ファイル,Lines), append(L0,[Line|R],Lines), _行 is L0 + 1, 'その文字列中初出の\\s*,\\s*をデータ区切り子として見なし分割する'(Line,_前文字列,_後文字列), fail. 'その文字列中初出の\\s*,\\s*をデータ区切り子として見なし分割する'(Line,_前文字列,_後文字列) :- sub_atom(Line,_,_,_,_前文字列,_区切り文字列,_後文字列,L1,L2,L3), append(L0,[','|R],L2), all(L0,' '), \+((append(L01,[A|_],R),\+(A=' '))),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/591 # # まだ正規表現が素人なので教えてください。 # たとえば以下のように四行の文章があって # それら文章の最初(一番目)の空白文字だけを検索するには # どうすればいいのですか? # # The environment of contents industries is so drastically changing, # though Japan has not fully. # taken advantage of the changes to develop. # its presence in the global market. # # The とenvironmentの間の空白文字 、though と Japanの間 # taken とadvantage の間の空白文などなどです # # 'それら文章の最初(一番目)の空白文字だけを検索するには'(Lines,_前文字列,_適合文字,_後文字列) :- append(_,[Line|R],Lines), 最初の空白文字(Line,_前文字列,_適合文字,_後文字列), R = []. 最初の空白文字(_文字列,_前文字列,_適合文字,_後文字列) :- sub_atom(_文字列,_,1,_,_前文字列,' ',_後文字列,L1,L2,L3),!. 最初の空白文字(_文字列,_文字列,'',''). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/568 # # perl で, # 「<と>で囲まれた文字列内の abc を def に全て置換する」 # というのは正規表現でどう書けばよいでしょうか。 # # マッチだけならば # "<asaabcasalaabca>" =~ /\<(.*?)(abc(.*?))*?\>/ # のようにしてマッチさせられるのですが,繰り返しがあるので後方参照で取得できません。 # # '<と>で囲まれた文字列内の abc を def に全て置換する'('','') :- !. '<と>で囲まれた文字列内の abc を def に全て置換する'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,['<'|R2],L3), append(L00,['>'],R2), abcをdefに置換する(L00,L22), append(L1,['<',L22],['>'],L4), concat_atom(L4,S22), '<と>で囲まれた文字列内の abc を def に全て置換する'(S3,S4), concat_atom([S22,S4],_置換された文字列). abcをdefに置換(L1,L2) :- append(L0,[a,b,c|R1],L1), append(L0,[d,e,f|R1],L2),!. abcをdefに置換(L,L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/555 # #  /身長:(\d+)\n体重:(\d+)/ # という正規表現に対し、例えば #  "身長:175\n体重:67" # という文字列がきたら #  "身長:<font color="red">175</font>\n体重:<font color="blue">67</font>" # のようにHTMLタグを追加したい。 # # ただし #  "身長:100\n体重:100" # のように身長と体重が同じ場合も身長は赤、体重は青にしたい。 # # もっと欲をいえば正規表現は身長・体重だけでなく #  /年齢:(\d+)\n好きな食べ物:(\S+)/ # のように可変にしたい。 # # # 'A:Va\nB:Vb 形式のデータから A: VaB: color="青">VbのようにHTMLタグを追加したい。ただし、Va=Vbのときはカラーを赤、青としたい'(_属性1,_属性2,Lines1,Lines2) :- atom_chars(_属性1,_属性文字ならび1), atom_chars(_属性2,_属性文字ならび2), findall(Line2,( append(_,[Line1|_],Lines1), sub_atom(Line1,_,_,_,S1,S2,S3,L1,L2,L3), append(_属性文字ならび1,[':',' '|R22],L2), append(_属性文字ならび2,[':',' '|R33],L3), concat_atom(R22,Va), append(L0,[A|R4],R33), concat_atom(L0,Vb), \+(append(_,[A|_],['0','1','2','3','4','5','6','7','8','9'])), concat_atom([S1,_属性1,': ',Va,'',_属性2,': ',Vb,''],Line2)), Lines2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/554 # # PHPでPerl互換のpreg_replace関数を使った置換を行おうとしているのですが、 # やりたいことがうまく実現できません。 # # やりたいことは、 # # ・<tagA>という文字列と</tagA>のあいだに<tagInsert>という文字列を挿入したい # ・ただし、<tagA>の中に<tagB>という文字列がある場合は、その<tagB>の下に挿入したい # # # <失敗した正規表現> # $new_str = preg_replace("/<tagA(.*?)>(.*?)(<(?!tagB).)*/", '<tagA\\1>\\2<tagInsert>\\3', $str); # # <実現したい例> # <tagA> # <tagB> # <tagB> # <tagC> # </tagA> # # ↓置換実行 # <tagA> # <tagB> # <tagB> # <tagInsert> # <tagC> # </tagA> # # 'という文字列とのあいだにという文字列を挿入したい。ただし、の中にという文字列がある場合は、そのの下に挿入する'(Lines1,Lines2) :- append(L1,[''|R2],[''|R3],Lines1), \+(append(_,[''|_],R3)), append(_,[''|_],R3), append(L1,[''|R2],['',''|R3],Line2),!. 'という文字列とのあいだにという文字列を挿入したい。ただし、の中にという文字列がある場合は、そのの下に挿入する'(Lines1,Lines2) :- append(L1,[''|R2],[''|R3],Lines1), append(L1,['',''|R2],[''|R3],Line2),!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/547 # # PHP5で、$txtに格納された # # <a href="javascript:userid('123456');">テキスト</a> # ※「123456」と「テキスト」は変化します # # といった並びの文字列からタグをぬいて # # 123456,テキスト, # # とカンマ区切りにしたいのですが、何か良い方法はないでしょうか # # '<a href="javascript:userid(''123456'');">テキスト</a>といった並びの文字列からタグをぬいて123456,テキストとカンマ区切りにしたい'(_文字列,_置換された文字列) :- atom_chars('a href="javascript:userid(''',L0), sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), append(L0,L11,['''',')',';','"',>],L2), すべて数字(L11), atom_chars(S11,L11), append(L03,[<,/,a,>|_],L3), concat_atom(L03,S03), concat_atom([S11,S03],',',_置換された文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/532 # # perlでテキストデータ内の日付部分を、 # 2009/1/1 # ↓ # 2009/01/01 # に一行で置換したいのですが。 # s|/([0-9][^0-9])|/0$1|gm; # だと、2回同じ処理が必要になってしまいます。 # いい方法ありますか? # # '2009/1/1 -> 2009/01/01 に置換したい'(_文字列,_置換された文字列) :- '2009/1/1 -> 2009/01/01 に置換したい'(_文字列,'',_置換された文字列). '2009/1/1 -> 2009/01/01 に置換したい'(_文字列,_前文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,_後文字列,L1,[Y1,Y2,Y3,Y4,/,M,/,D],L3), concat_atom([Y1,Y2,Y3,Y4,/,'0',M,/,'0',D],S22), concat_atom([S1,S22],_置換された文字列の一), concat_atom([_前文字列,_置換された文字列の一],_前文字列の二), '2009/1/1 -> 2009/01/01 に置換したい'(_後文字列,_前文字列の二,_置換された文字列). '2009/1/1 -> 2009/01/01 に置換したい'(_文字列,_前文字列,_置換された文字列) :- concat_atom([_前文字列,_文字列],_置換された文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/525 # # Perlの正規表現で質問させて下さい。 # yyyy/mm/entry-basename/index.php # ↑はどのように記述すればいいのか、お手数ですがご教授願います<(_ _)> # 'yyyy/mm/entry-basename/index.php を検索する'(_文字列,_前文字列,_適合文字列,_後文字列) :- atom_chars('/entry-basename/index.php',Chars1), sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,[Y1,Y2,Y3,Y4,/,M1,M2|Chars1],L3), すべて数字([Y1,Y2,Y3,Y4,M1,M2]), append(_,[M1|_],['0','1']), \+((last(L1,A),数字(A))). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/519 # # 質問させて下さい。 # # ABC # …LMNO……… # ……LMNO…… # ………LMNO… # XYZ # # というような文章があったとします。 # 「LMNO」の前後(「…」)には文字(日本語や英数字)があります。 # # Perl5互換の正規表現が使えるテキストエディタや、BREGEXP.DLLが使える置換えソフトを使用し、 # 「ABC」から「XYZ」までにある「LMNO」を「OOOO」に置換えすることは可能でしょうか? # 特定の範囲内の文字だけを置換えする正規表現がわからず、検索文字列と置換え文字列の指定で困っています。 # どのようにすれば良いのか教えて頂けると助かります。よろしくお願いします。 # # '特定の範囲内の文字だけを置換えする正規表現がわからず、検索文字列と置換え文字列の指定'(Lines,_置換されたLines) :- append(L0,['ABC'|R1],['XYZ'|R2],Lines), findall(Line2,( append(_,[Line|_],R1), 'LineのLENOをOOOOに置換する'(Line,Line2)), Lines2), append(L0,Lines2,R2,_置換されたLines). 'LineのLENOをOOOOに置換する'(Line,Line2) :- sub_atom(Line,_,_,_,S1,'LENO',S3,L1,L2,L3), concat_atom([S1,'OOOO',S3],_置換されたLine),!. 'LineのLENOをOOOOに置換する'(Line,Line). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/514 # # すみません、質問させてください。 # # 曲名のリストを一括置換しようとしています。具体的には"〜 by"が # 入る丸括弧だけ四角括弧"[ ]"に置き換えたいのです。 # # 例 # This is me (talk) (Composed by Johan) # ↓ # This is me (talk) [Composed by Johan] # # どのような書式にすればいいかご教示お願いします。 # '曲名のリストを一括置換しようとしています。具体的には"〜 by"が入る丸括弧だけ四角括弧"[ ]"に置き換えたいのです。'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,['('|R1],L3), last(R1,')'), \+(append(_,['('|_],R1)), split(R1,['(',')',' by '],[A,B]), concat_atom([S1,'[',A,' by ',B,']',S3],_置換された文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/506 # # 下記の2文にあるfontタグを消したいです。 # 正規表現を用いた1度の置換で消せますか? # # <dd><font style="font-size:;color:;"> テスト <br> テスト </font><br><br></dd> # <dd><font style="font-size:;color:;"> テスト2 <br> テスト2 </font><br><br></dd> # # # 考え方として # <dd><font style="font-size:;color:;">がある行のうち</font>を削除し、そのあと<font style="font-size:;color:;">を削除 # これで行けそうかと思ったのですが、●●がある行のうち○○を削除、という正規表現がわかりませんでした・・・ # # 'fontタグのみ削除する'(_文字列,_fontタグが削除された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), append([<,f,o,n,t|R1],[>],L2), \+(append(_,[>|_],R2)), append(L3_0,[<,/,f,o,n,t,>|R3],L3), \+(append(_,[<,/,f,o,n,t,>|_],L3_0)), append(L1,L3_0,R3,L4), atom_chars(_fontタグが削除された文字列,L4). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/503 # # 以下のような文字列を置換ですべて削除したいのですが # どうかけばいいのでしょうか # # onMouseOver="refPopUp(1,event)" onMouseOut="hidePop()" # onMouseOver="refPopUp(23,event)" onMouseOut="hidePop()" # onMouseOver="refPopUp(345,event)" onMouseOut="hidePop()" # ↓ # 3行すべて削除 # # 試した正規表現 # onMouseOver="refPopUp(\d+{1,3}.,event)" onMouseOut="hidePop()" # # '以下のような文字列を置換ですべて削除したいのですが onMouseOver="refPopUp(1,event)" onMouseOut="hidePop()" onMouseOver="refPopUp(23,event)" onMouseOut="hidePop()" onMouseOver="refPopUp(345,event)" onMouseOut="hidePop()" 3行すべて削除'(Lines1,Lines2) :- '文字列を置換ですべて削除したい'(Lines1,Lines2). '文字列を置換ですべて削除したい'([],[]) :- !. '文字列を置換ですべて削除したい'([_文字列|R1],R2) :- !. sub_atom(_文字列,_,_,_,'onMouseOver="refPopUp(',S2,',event)" onMouseOut="hidePop()"',L1,L2,L3), すべてが数字(L2), '文字列を置換ですべて削除したい'(R1,R2). '文字列を置換ですべて削除したい'([_文字列|R1],[_文字列|R2]) :- !. '文字列を置換ですべて削除したい'(R1,R2). すべてが数値([]) :- !. すべてが数値([A|R]) :- append(_,[A|_],['0','1','2','3','4','5','6','7','8','9']), すべてが数値(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/498 # # PHP 正規表現について # # $str = 'test1?test2/test3;test4'; # # この文字の # test1 # test2 # test3 # test4 # を取り出すにはどうしたらよいでしょうか? # # この価を # data1=test1&data2=test2&data3=test3&data4=test4 # と変換したいです # # preg_replaceを使っています # $str = preg_replace("・^([a-zA-Z0-9]+\?+[a-zA-Z0-9]+)\/+[a-zA-Z0-9];+[a-zA-Z0-9)$・","data1=$1&data2=$2&data3=$3&data4=$4",$str)); # # # これではダメみたいです # '$str = ''test1?test2/test3;test4''; この文字の test1 test2 test3 test4 を取り出すにはどうしたらよいでしょうか?'(_文字列,L) :- split(_文字列,['?','/',';'],L). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/494 # # 文字xが離散して10個以上であるか(連続している部分は数えない) '文字列の中に文字xが離散して10個以上であるか(連続している部分は数えない)'(_文字列) :- '文字列の中に文字が離散してn個以上であるか(連続している部分は数えない)'(x,10,_文字列). '文字列の中に文字が離散してn個以上であるか(連続している部分は数えない)'(_文字,_n個,_文字列) :- count(( sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,[_文字],L3), \+((last(L1,_文字),L3=[_文字|_]))), Count), Count >= _n個,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/494 # # 文字xが離散して10個以上であるか(一箇所でも連続してはいけない) '文字列の中に文字xが離散して10個以上であるか(一箇所でも連続してはいけない)'(_文字列) :- '文字列の中に文字が離散してn個以上であるか(一箇所でも連続してはいけない)'(x,10,_文字列). '文字列の中に文字が離散してn個以上であるか(一箇所でも連続してはいけない)'(_文字,_n個,_文字列) :- \+(sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,[_文字,_文字],L3)), count(sub_atom(_文字列,_,1,_,_文字),Count), Count >= _n個,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/494 # # 文字xが連続して10個以上である場合にマッチさせるのに 文字xが10個以上である場合にマッチさせるのに(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_適合文字列,_後文字列,L1,L2,L3), length(L2,Len), Len >= 10, all(L2,x). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/480 # # phpのクラスファイルの特定の関数を正規表現で抜き出したいのですが可能でしょうか? # # 例 class.test.php から public function test($a){ 本文 } # # スケルトンコードの場合簡単に抜き出せるのですが、 # 本文中にif,swichなどで } が存在した場合どうすれば良いのか悩んでいます。 # # 'function定義で{ } で括られた本文を取り出す。本文中にif,swichなどで } が存在した場合どうするか'(_文字列,_前文字列,_本文,_後文字列) :- atom_chars(_文字列,Chars), append(L0,[f,u,n,c,t,i,o,n,' '|R1],['{'|R2],Chars), \+(append(_,['{'|_],R1)), 括弧が閉じられるまで切り取る(R2,L,R3), append([_],L1,[_],L11), concat_atom(L11,_本文), concat_atom(['}'|R3],_後文字列), append(L0,[f,u,n,c,t,i,o,n,' '|R1],['{'],L01), concat_atom(L01,_前文字列). 括弧が閉じられるまで切り取る(['}'|R],[],['}'|R]) :- !. 括弧が閉じられるまで切り取る(['{'|R1],L,R) :- 括弧が閉じられるまで切り取る(R1,L1,['}'|R2]), 括弧が閉じられるまで切り取る(R2,L2,R), append(['{'|L1],['}'|L2],L),!. 括弧が閉じられるまで切り取る([A|R1],[A|R2],R) :- 括弧が閉じられるまで切り取る(R1,R2,R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/474 # # phpです。 # たとえば普通に # http://ime.nu/google.co.jpと書いてあるものと # <a href="http://ime.nu/google.co.jp">test</a>と書いてある文字列があります。 # # この文字列内のタグになってないUrlをAタグでリンクを張りたいんですがどうしたらいいでしょうか。 # # # 'httpから始まるURLを取り出す'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,[h,t,t,p,:,/,/,'"'|R2],L3), すべてURL構成文字(R2), \+((L3=[A|_],\+('URL構成文字'(A)))), concat_atom(R2,_適合文字列), concat_atom([S1,'http://"'],_前文字列), concat_atom(['"'|R2],_後文字列). すべてURL構成文字([]) :- !. すべてURL構成文字([A|R]) :- 'URL構成文字'(A), すべてURL構成文字(R). 'URL構成文字'(A) :- append(_,[A|_],[:,/,+,-,%,~]),!. 'URL構成文字'(A) :- A @>= a,A @=< z,!. 'URL構成文字'(A) :- A @>= 'A',A @=< 'Z',!. 'URL構成文字'(A) :- A @>= '0',A @=< '9',!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/462 # # 「id="72157612930889935" primary="3224910389" secret="be0cf48b4f" server="3468" farm="4" photos="131" videos="0"」という文字列から、 # 「id=""」の数字を抜きたいのですが(この例であれば「72157612930889935」が欲しいです) # # $patern = 'id="(.*)" ?'; # ereg($patern,$line,$id); # echo $id[1]."<br />\n"; # # では最後のvideosの終わりのダブルコーテーションまで入ってしまいました。 # # ../test/read.cgi/php/1168450843/421に近いと思うのですが?で最短マッチ?になるような気もしますし # ../test/read.cgi/php/1168450843/412にあるように?は0か1回の繰り返しのようにも思うし…。 # OSはCent4系、PHP4.1.3、関数はeregを使いました。どなたか助けて下さい # # '「id="72157612930889935" primary="3224910389" secret="be0cf48b4f" server="3468" farm="4" photos="131" videos="0"」という文字列から、「id=""」の数字を抜きたいのですが(この例であれば「72157612930889935」が欲しいです)'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,[i,d,=,'"'|R2],['"'|R3]), \+(append(_,['"'|_],R2)), concat_atom(R2,_適合文字列), concat_atom([S1,'id="'],_前文字列), concat_atom(['"',S3],_後文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/431 # # 失礼します # 使用言語はperl5です # # 配列に、前からマッチしたところまでの文字列を繰り返し入れようとしています # ($str = 'hogehugahage'; # という文字列があって、hでマッチさせたら # @data = ['h', 'hogeh', 'hogehugah'] # という配列になることを想定しています) # # @data = $str =~ m/h/g; # のときは予想どおり # @data = ['h', 'h', 'h'] # となったのですが、 # @data = $str =~ m/^.*h/g # の場合は # @data = ['hogehugah'] # となって1回最大マッチするだけのようです # # どうすれば予想通りの結果になるでしょうか? # '配列に、前からマッチしたところまでの文字列を繰り返し入れようとしています($str = ''hogehugahage'';という文字列があって、hでマッチさせたら@data = [''h'', ''hogeh'', ''hogehugah'']という配列になる'(_検索文字列,_文字列,_先頭から検索文字列までの文字列ならび) :- findall(_先頭から適合文字列まで文字列, '前からマッチしたところまでの文字列ならび'(_検索文字列,_文字列,_先頭か適合文字列までの文字列), _先頭から適合文字列までの文字列ならび). '前からマッチしたところまでの文字列ならび'(_検索文字列,_文字列,_適合文字列) :- sub_atom(_文字列,_,_,_,S1,_検索文字列,S3,L1,L2,L3), concat_atom([S1,_検索文字列],_適合文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/425 # # Jeditで # 【あいう】を【6あいう】 # 【かき】を【4かき】 # のように【 】でははさまれた文字列の頭に文字数×2の数値を追加したいのですが # どのように検索してどのように置換すればよいでしょうか? # 【 】ではさまれた文字数はまちまちです。 # よろしくお願いします。 # '【あいう】を【6あいう】 【かき】を【4かき】 のように【 】でははさまれた文字列の頭に文字数×2の数値を追加したいのですがどのように検索してどのように置換すればよいか'(_文字列,_置換された文字列) :- atom_chars(_文字列,Chars), '【あいう】を【6あいう】 【かき】を【4かき】 のように【 】でははさまれた文字列の頭に文字数×2の数値を追加する'(Chars,L), concat_atom(L,_置換された文字列). '【あいう】を【6あいう】 【かき】を【4かき】 のように【 】でははさまれた文字列の頭に文字数×2の数値を追加する'(Chars,[S|R]) :- append(L0,['['|R1],[']'|R2],Chars), \+(append(_,['['|_],R1)), \+(append(_,[']'|_],R1)), length(R0,Len), Len2 is Len * 2, append(L0,['[',Len2|R0],[']'],L3), concat_atom(L3,S), '【あいう】を【6あいう】 【かき】を【4かき】 のように【 】でははさまれた文字列の頭に文字数×2の数値を追加する'(R2,R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/401 # # PHP5で使います # # $numには、 # # +数字 # -数字 # 数字 # # というようなパターンの時のみマッチさせたいです # 数字のところは 0〜999999999までの値が入ってきますが、0以外の時に頭に0がある場合0123とかは除外したいです # 試行錯誤して下記のようにしてみましたが、思った結果が得られません。エラー出まくりでなみだ目です # どうかよろしくお願いします # # # preg_match('/^(([^+]*)*(++[^-][^+]*)*)*?[^0-9]*$/',$num) # '+数字 -数字 数字 というようなパターンの時のみマッチさせたいです。数字のところは 0〜999999999までの値が入ってきますが、0以外の時に頭に0がある場合0123とかは除外したいです'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_文字列,_前文字列,_適合文字列,_後文字列,L1,L2,L3), 適合診断(L2), \+((append(_,[A],L1),数字(A))), \+((L3 = [B|_],数字(B))). 適合診断([+|R]) :- すべて数字(R),!. 適合診断([-|R]) :- すべて数字(R),!. 適合診断([A|R]) :- A @>= '1', A @=< '9', すべて数字(R),!. すべて数字([]) :- !. すべて数字([A|R]) :- A @>= '0', A @=< '9', すべて数字(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/395 # # 使用言語はPHP5です # # html内のimgタグの記述部分をxhtmlにするために最後にスペースとスラッシュを付け加えたいと思い # 以下の置き換えを行い成功したのですが、 # # $html = preg_replace('{<img (.*?)>}' ,'<img $1 />' ,$html); # # 元々imgタグ内にスペースとスラッシュが最後に入っているのもありますので、それ以外ということで # # $html = preg_replace('{<img (.*?)^\/>}' ,'<img $1 />' ,$html); # # このように記述してみましたが、これですと全部のimgタグに置き換えが効かなくなりました # どういう記述をすればよいのでしょうか? # 'html内のimgタグの記述部分をxhtmlにするために最後にスペースとスラッシュを付け加えたい'(_文字列,_置換された文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,[i,m,g,' '|R2],L3), append(R21,['>'],R2), \+(append(_,['>'|_],R21)), 'html内のimgタグの記述部分をxhtmlにするために最後にスペースとスラッシュを付け加えたい'(R2,L), concat_atom(L,_置換された文字列). 'html内のimgタグの記述部分をxhtmlにするために最後にスペースとスラッシュを付け加えたい'([' ',/,>],[' ',/,>]) :- !. 'html内のimgタグの記述部分をxhtmlにするために最後にスペースとスラッシュを付け加えたい'(['>'],[' ',/,>]) :- !. 'html内のimgタグの記述部分をxhtmlにするために最後にスペースとスラッシュを付け加えたい'([A|R1],[A|R2]) :- 'html内のimgタグの記述部分をxhtmlにするために最後にスペースとスラッシュを付け加えたい'(R1,R2). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/391 # # 質問です。 # 下記のような配列の中から、 # (2)〜(4)までのみを抽出したいと思っています。 # #  (1) testa@hoge #  (2) _testb@hage #  (3) _testc@noge #  (4) _testd@nage #  (5) _teste@n_ge # # ルールとしては、 #  ・頭に[_]が付いている事、 #  ・@の後ろに[n_]が付いていない事 # です。上記前提で下記のように書いたのですが、 # これですと(2)しか抽出されませんでした。 # #  $test =~ /^_.*@[^(n_)]/ # # @の後ろの正規表現が悪いのだと思うんですが、 # この場合どのように書けばいいんでしょうか。 # ご教示お願いしますm(_ _)m # 'ルールとしては、頭に[_]が付いている事、@の後ろに[n_]が付いていない事'(_複数行文字列,_適合行) :- split(_複数行文字列,['\n'],_行ならび), append(_,[_行|_],_行ならび), 'ルールとしては、頭に[_]が付いている事、@の後ろに[n_]が付いていない事'(_行). 'ルールとしては、頭に[_]が付いている事、@の後ろに[n_]が付いていない事'(_文字列) :- \+(sub_atom(_文字列,0,1,_,'_')), \+(sub_atom(_文字列,_,3,_,'@n_')). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/388 # # 質問させてください。 # OSはubuntu8.04で正規表現を勉強し始めの者です。 # # 電話番号と郵便番号が混在しているテキストファイルから郵便番号だけ # 抽出するという条件なんですが、 # # 郵便番号はxxx-xxxx(xは0-9の数字)、電話番号はxx-xxxx-xxxx(xは0-9の数字) # で、grep -E [0-9]\{3\}-[0-9]\{4\} とやっても電話番号も全て抽出されてしまいます。 # どこが間違っているのでしょうか。 # # 電話番号と郵便番号が混在しているテキストファイルから郵便番号だけ抽出する(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,8,_,_前文字列,_適合文字列,_後文字列,L1,[N1,N2,N3,-,N4,N5,N6,N7],L3), last(L1,A), \+(数字(A)), \+((L3=[B|_],数字(B))). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/328 # # 質問させて下さい。 # PHP5を使っています。 # PHPの正規表現関数を使ってデータを取得しようと思っているのですが上手くいきません # <INPUT maxLength=20 name=id value=""> # このような文字列を対象に、文字列「type」が含まれていない場合、後方の「maxLength=20 name=id value=""」 # を取得したいのです。 # 全文に対して繰り返し取得したいのでpreg_match_allを使っています。 # # preg_match_all( "/<input (^type)[^<](.*?)>/is", $data, $matchs ) # このように書いたのですがヒットしてくれません。 # ドキュメントを見ると、特定文字に関しては[^a-z]のような書き方で対応できるのですが # 文字列に関してはどのようにすればよいのでしょうか? # アドバイス頂ければ幸いです。 # 宜しくお願い致します。 # # '<INPUT maxLength=20 name=id value="">このような文字列を対象に、文字列「type」が含まれていない場合、後方の「maxLength=20 name=id value=""」を取得したい'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,['<','I','N','P','U','T',' '|R2],L3), append(L,['>'],R2), \+(append(_,['>'|_],L)), \+(検索(S2,type)), concat_atom(L,_適合文字列), concat_atom([S1,'% 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/326 # # PHP 正規表現 # # PHPの正規表現を勉強しているのですが、どうもうまくいきません。今回は一番簡単な正規表現をつくったのですが、どうやったらよいのでしょうか。 # # $h = '(名前)様の会員IDは(abc12)で、(5)番目に偉い方です。'; # # とあったら、名前、会員ID、番号を抜き出すには、どのようにしたらよいのでしょうか? # 実際に()は使用しません。 # また、$1 や $2 などを使いたいのですが、解説までできればお願いしたいです。 # 一応自分なりに考えました。 # preg_match('/^*.([a-zA-Z0-9]){2}([0-9]+)','名前$2.ID$1 $3 番目に偉い'); # ()を使えば、2つマッチさせたいときなどに分けることができるのでしょうか? # (名前)様は(数字) # 例:太郎様は5 # # このとき太郎様という日本語の文字を取得するには/^(+.)([0-9])$/ # # ここで名前は$1になり、数字は$2になるのでしょうか? # どのような時に$1や$2がどっちがどっちなのかは、どのようにしたらわかるのでしょうか? # # # 長々した質問すいません。わかるかた教えてください。 # '(名前)様の会員IDは(abc12)で、(5)番目に偉い方です。とあったら、名前、会員ID、番号を抜き出すには、どのようにしたらよいのでしょうか? 実際に()は使用しません。 '(_名前,_会員ID,_n番目) :- _文字列 = '名前様の会員IDはabc12で、5番目に偉い方です。', '名前、会員ID、番号を抜き出す'(_文字列,_名前,_会員ID,_n番目). '名前、会員ID、番号を抜き出す'(_文字列,_名前,_会員ID,_n番目) :- split(_文字列,[様の会員IDは,'で、',番目に],[_名前,_会員ID,_n番目|_]. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/314 # # ,"/web/sendmail.php","10","10","2000" # こういう感じの文章の # ,"2000" # のみ抽出したいんですが、どう書けばいいんでしょうか? # # ",".*[0-9]"$ # だと"10","10","2000"まで拾っちゃうんです・・・。 # # '"/web/sendmail.php","10","10","2000" こういう感じの文章の,"2000"のみ抽出したい'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,L2,L3), append(['"'|R1],['"'],L2), すべて数字(R1), length(R1,4), concat_atom(R1,_適合文字列), concat_atom([S1,'"'],_前文字列), concat_atom(['"',S3],_後文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/307 # # JavaScriptで下記のようなデータを取得したいです。 # # hogehoge[1]→1 # hogehoge[123]→123 # hogehoge[1243][]→1243 # # []の中身を取得したく、[]が2つあった場合は最初の[]の中身を取得します。 # (ただし、2個目の[]は常に空です。) # # hogehogeは任意の文字列で、[]の中身は何桁か分からない数字の繰り返しです。 # # 以上ご鞭撻の程お願いします。 # # '[]の中身を取得したく、[]が2つあった場合は最初の[]の中身を取得します。'(_文字列,_前文字列,_適合文字列,_後文字列) :- sub_atom(_文字列,_,_,_,S1,S2,S3,L1,[h,o,g,e,h,o,g,e,'['|R2],L3), append(L0,[']'|R4],R2), concat_atom(L0,_適合文字列), concat_atom([S1,'hogehoge['],_前文字列), concat_atom([']'|R4],S4), concat_atom([S4|L3],_後文字列). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/94 # # すみませんが、価格にマッチする正規表現を教えていただけないでしょうか。 # # 例 # \1,000,000,000 # \12,345 # \1,230 # \200 # \10 # # # 数字3つごとに、カンマが入り、先頭に円マーク(\)のくるものです。 # # 判らないためググッたのですが、正規表現に関する本ばかり検索結果として出てきまして…。 # # '価格にマッチする'(_文字列,_前文字列,_価格表現文字列,_後文字列) :- sub_atom(_文字列,_,_,_,_前文字列,_価格表現文字列,_後文字列,L1,['\\'|R2],L3), \+((L3=[A|_],append(_,[A|_],[',','0','1','2','3','4','5','6','7','8','9']))), カンマ付き数値ならび(R2). カンマ付き数値ならび([]) :- !. カンマ付き数値ならび(L) :- length(L,Len), Len =< 3, すべて数字(L),!. カンマ付き数値ならび([A,B,C,','|R]) :- すべて数字([A,B,C]), カンマ付き数値ならび(R). カンマ付き数値ならび([A,B,','|R]) :- すべて数字([A,B]), カンマ付き数値ならび(R). カンマ付き数値ならび([A,','|R]) :- すべて数字([A]), カンマ付き数値ならび(R). すべて数字([]) :- !. すべて数字([A|R]) :- append(_[A|_],['0','1','2','3','4','5','6','7','8','9']), すべて数字(R). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/253 # # 時間(13:00:00〜18:00:00)までを正規表現であらわしたいのですが、 # # 1[3-8]:[0-5][0-9]:[0-5][0-9] # # という感じに今なっています # 誰が見てもわかりやすいしこれでもいいのですが、もっと短い書き方はないものでしょうか? # # [0-5][0-9]ここが反復なので、([0-5][0-9]:?){2}とか思いつくのですが、 # これだと最後にコロンが入っててもマッチしてしまうので回避できるような書き方はないものかなぁと。 # # 'コロン区切りの時分秒範囲の表現'(_時分秒文字列,_時下限,_分下限,_秒下限,_時上限,_分上限,_秒上限,_前文字列,_適合文字列,_後文字列) :- sub_atom(_時分秒文字列,_,_,_,_前文字列,_適合文字列,_後文字列,_,[A1,A2,:,B1,B2,:,C1,C2],_), 最後が数字またはコロンではない(L1), 先頭が数字またはコロンではない(L3), H is H1 * 10 + H2, M is M1 * 10 + M2, S is S1 * 10 + S2, [H,M,S] @>= [_時下限,_分下限,_秒下限], [H,M,S] @=< [_時上限,_分上限,_秒上限]. 最後が数字またはコロンではない(L) :- last(L,A), append(_,[A|_],['0','1','2','3','4','5','6','7','8','9',':']), !,fail. 最後が数字またはコロンではない(_). 最初が数字またはコロンではない([A|_]) :- append(_,[A|_],['0','1','2','3','4','5','6','7','8','9',':']), !,fail. 最後が数字またはコロンではない(_). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/224 # # 「あいうえおABC+F481ABC+F485かきくけこABC+F7A5さしすせそABC+F3F0ABC+F39EたちつてとABC+F65AなにぬねのABC+F485ABC+F7A5はひふへほABC+F7A5ABC+F39Eまみむめも」 # # 上記の中に、「ABC+16進数x2回」がいくつ含まれているかをPHPの正規表現で表すにはどうかけばよろしいでしょうか? # ご鞭撻よろしくお願いいたします。 # '文字列の中に「ABC+16進数x2回」がいくつ含まれているか'(_文字列,_いくつ) :- atom_chars(_文字列,Chars), 'ならびの中に「ABC+16進数x2回」がいくつ含まれているか'(Chars,[],Ln), length(Ln,_いくつ). 'ならびの中に「ABC+16進数x2回」がいくつ含まれているか'([],Ln,Ln) :- !. 'ならびの中に「ABC+16進数x2回」がいくつ含まれているか'(['A','B','C','+',X1,X2,X3,X4|R1],Ln1,Ln) :- すべて16進数文字([X1,X2,X3,X4]), 'ならびの中に「ABC+16進数x2回」がいくつ含まれているか'(Ln,R1,[_|Ln1]). 'ならびの中に「ABC+16進数x2回」がいくつ含まれているか'([_|R1],Ln1,Ln) :- 'ならびの中に「ABC+16進数x2回」がいくつ含まれているか'(R1,Ln1,Ln). すべて16進数文字([]) :- !. すべて16進数文字([A|R]) :- member(A,['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']), すべて16進数文字(R). 先頭から16進数文字ならび([],[],[]) :- !. 先頭から16進数文字ならび([A|R1],[A|R2],R) :- member(A,['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']), 先頭から16進数文字ならび(R1,R2,R),!. 先頭から16進数文字ならび(L,[],L). '16進数表示文字ならび'(['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/php/1168450843/193 # # <TD width="52" height="25" bordercolor="#CCCCCC" valign="middle"> # <div align="center">F8FA</div> # </TD> # # これの # # 「F8FA」の部分をpreg_match_all取得したいのですが、 # '/<TD .*><div .*>(.*)</div><\/TD>/Ums' # # としたのですが、何も取得されません。 # どのように表記すれば良いのでしょうか? # 'TDタグの中のdivタグの値'(_文字列,_前文字列,_タグの値,_後文字列) :- sPLIT(_文字列,['','