正規表現 part4at TECH
正規表現 part4 - 暇つぶし2ch652:デフォルトの名無しさん
08/04/05 00:19:51
○(.*)○
これで抽出できないかな?正規表現始めたばっかでよくわからないけど

653:デフォルトの名無しさん
08/04/05 00:20:47
○*(.*)○*
こうか、すまん

654:デフォルトの名無しさん
08/04/05 00:21:36
基本的に正規表現は最長一致するから >>652 で問題ないんじゃない?

655:デフォルトの名無しさん
08/04/05 00:27:45
test

656:デフォルトの名無しさん
08/04/05 01:28:02
>>650
言語と文字コードがないとあきまへんが、なんとかせーっちゅーなら、

(\xe3\x80\x80|\xa1\xa1|\x81@)(.*)(\xe3\x80\x80|\xa1\xa1|\x81@)

これでいけますわ。utf-8,shift_jis,euc-jpなんでもこいのすぐれものや。

657:デフォルトの名無しさん
08/04/05 01:59:54
どうして正規表現はいつもいつも顔文字に見えてしまうんですか?

658:デフォルトの名無しさん
08/04/05 02:59:24
>>650
「○11○5656○」
これの1個目3個目の空白はマッチさせないんだよね
2個目の空白は実際にはあるかないかわからない
両隣は任意の文字
ん~これピッタシあわせるのは今の情報だけでは難しいというより不可能じゃないでしょうか
任意の文字が半角だけの構成なら[0-9][a-z]簡単なんだけどなー
何か他にkeyに出来そうなのないですか?

それとここで解答者が自分の環境でよい結果が出てもあなたの環境ではマッチしないかもしれない
環境に合った正規表現の使い方をしないとマッチさせれない場合がありますよ
質問者も解答者も徒労に終わるので
あなたが正規表現をどのように使うのか記載したほうがいいよ
正規表現を扱おうとする言語もしくは正規表現を扱えるエディターで検索しようとしているのか
あなたを攻めてるわけではないので誤解しないようにね

659:デフォルトの名無しさん
08/04/05 03:16:49
>>650
[^\x81@].*[^\x81@]

660:デフォルトの名無しさん
08/04/05 08:53:44
>>653
ああ、そうか。そうだな。

661:650
08/04/05 12:28:26
すみません戻りました
皆様レスありがとうございます
「○11○5656○」
○は全角スペース、何個あるかわからないし、ないかもしれません
「一三○四○○○」だったら「一三○四」
「○○○○八九4○○た」だったら「八九4○○た」
こんな感じで取得したいです
他の文字は任意です。全角の場合が多いですが
言語はJava、コードはUnicodeかな?
簡単に言うと両端の全角スペースをトリムしたいだけなのですが・・・
わかり難い表現ですみません

662:デフォルトの名無しさん
08/04/05 12:35:01
先頭の全角スペースを除去、末尾の全角スペースを除去
という処理にしたほうが簡単だよ

非欲張りなのが使えればこうかな
/ *(.*?) *$/

663:デフォルトの名無しさん
08/04/05 12:50:55
/^□*([^□]+(□+[^□]+)*)□*$/

664:デフォルトの名無しさん
08/04/07 03:05:23
gawk3.16です
2行に渡る文字列を検索でマッチさせたいです
<title(.+?)\n.*title>
秀丸(正規表現ON)ではマッチしていたのですがgawkではマッチしません
アドバイス頂けましたら幸いです
どうぞよろしくお願い致します

665:デフォルトの名無しさん
08/04/07 03:14:35
mオプション可能な処理系を使うか、事前に加工しとくか。

666:デフォルトの名無しさん
08/04/07 04:08:57
>>665さん
mオプション
マルチラインですね
実はgawkのスクリピトを教えていただいたのです
とても気に入り今後末永く使わせていただこうと思うのですが
複数行の検索が秀丸と違うようなので戸惑っています
他にgawkのアドバイスありましたらよろしくお願いします

667:デフォルトの名無しさん
08/04/07 06:08:38
>666
相変わらず具体的じゃないのね。
665をやったがこういう風にうまくいかなかったとか
こうしたけどダメだったとかあれば、アドバイスのしようもありますが、
他にアドバイスと言われてもなかなか。

668:デフォルトの名無しさん
08/04/07 08:58:29
>>666
ない物は仕方ない。
mオプションの正規表現を組み込んだawkを自前で作る?
perlとか、正規表現が拡張されてる処理系に移った方が、後々幸せ。

669:デフォルトの名無しさん
08/04/07 13:26:21
gawk3.16で複数行にまたがる文字列をマッチさせたいです
エイチティティピー://www.kt.rim.or.jp/~kbk/gawk/gawk_5.html#SEC28
上記アドレスのページに「複数行レコード」と記述がありました
>変数FS に "\n"という文字列をセットすれば良い。
> (これは、改行にマッチする単純な正規表現である)
わかる方おられましたら教えて下さい

やってみたこと
gawk.exe "FS = \n 検索文字列 プリントアウト"入力ファイル>出力ファイル
エラー:^バックスラッシュが行最後の文字になっていません

gawk.exe "FS = \n 検索プリントアウト"入力ファイル>出力ファイル^
エラー:More?

gawk.exe "FS = \n 検索プリントアウト"入力ファイル>出力ファイル/
ファイル名、ディレクトリ名 またはボリュームラベルの構文が間違っています

PS:
666です
>>667さん
>>668さん
レスありがとうです


670:デフォルトの名無しさん
08/04/07 13:57:34
>>669
気付け。gawkじゃ無理。
FSはフィールドセパレータ。用途が全然違う。

671:デフォルトの名無しさん
08/04/07 14:00:36
そういうのはどうしてもawkでやりたければtrで改行文字を置換してからawkで処理して戻すとかやるからなぁ。
awkだけじゃなくて、基本的な知識が足りなすぎるよ。

672:デフォルトの名無しさん
08/04/07 14:04:12
>>669です
>>670さん
>>671さん
gawkは諦めた方がよいかもしれないですね
私じゃ無理だということはわかりました
アドバイスありがとうございました^^;

673:デフォルトの名無しさん
08/04/07 16:01:44
<element attribute>マルチラインを
キャプチャしたいんです</element>

このお題はまだ続くのかな。

> perl5.8です
> gawk3.16です
次は何だろ。

674:デフォルトの名無しさん
08/04/08 00:07:32
>>673
残念でした
秀丸
perl
gawk
ですよw

秀丸でもう少しのところまでいけたんだけど
データが長すぎて最後のソートが出来なかったんだ
それでエクセルとかでやろうとしたんだけど
文字化けで遠回りした
正規表現扱えないんだってわかるのに1週間かかったw
んで改めてやってるんよ
データ形式をちょっと変えて保存するだけなんだけど
こんなに難しいとは思わなかった
秀丸スレの人たちとUWSCスレの人たちのお陰で
ここまでなんとか前進できた
いつも「もう少しだっ」って思っていたところへたどり着くまでに
思いもよらぬ壁が現れるんだ
この正規表現もそうだね
私は正規表現って生まれて始めて知ったんだ
またお願いしますね
オヤシミ^^


675:デフォルトの名無しさん
08/04/08 03:18:20
>>674
Excelでも正規表現使えるよ。
CreateObject で正規表現オブジェクトを使えるようにすればね。

つか、Perlでできなかったてーのはなんでだ?


676:デフォルトの名無しさん
08/04/08 03:25:58
>>675
perlで出来そうなんだけど私が作れないだけ^^;
オヤシミノシ

677:デフォルトの名無しさん
08/04/08 05:15:30
>>676
正規表現使うならperlじゃなくてもいいが何かプログラミング言語もやっといたほうが自由度はあがると思うけどな。
perlは何するにしても過去の遺産のおかげで楽ができるから趣味でやる分にはお勧め。

678:デフォルトの名無しさん
08/04/08 14:44:33
いくつかのスレで見かけたけど、大本のやりたいことは何なの?
ウェブページをテキストで取り込んでデータベース可?
なんだかやりたいことの過程で部分部分でこのソフトでこうするのはどうしたらいいか
とういう質問でよく分からない。

紙copi/紙copi lite/Kamicopi/ネタの種 12
スレリンク(software板)
あたりのソフトを使えば良いんじゃないか?とか思っちゃうんですが、見当違いだったらごめんね。

679:デフォルトの名無しさん
08/04/08 18:46:44
>>678
紙コピ持ってるよ
最初はスゲーとか思ってシェア払って正規ユーザーなったけど
加工で正規表現検索できないので役に立たない
ビジネスバージョンも抽選で当たったけど
もう使ってないよ

やりたいことは何十回も書いてるよ
ここで書くのもなんなんだけど
既存のファイルからタイトルとデータ1箇所を抽出して一覧表作りたいだけ

<ol>
<li><a href="ファイル名">タイトル</a></li>
<li>データ</li>
</li>予備項目(空欄)</li>
</ol>

この前ファイル名とタイトルの部分を作ってくれた方が居たんだけど
その下にデータ項目と予備項目を作らなければいけないことがわかって
もっかい頼んだら後でコロコロ変わるってことで断られた
それで自分でやってるわけ^^;

680:デフォルトの名無しさん
08/04/08 22:33:34
素朴な疑問だが、「シェア払って」ってなに?

681:デフォルトの名無しさん
08/04/08 23:15:19
「シェア払って」ですか
「お金払って」ですね


682:デフォルトの名無しさん
08/04/09 11:27:48
シェアウェアにシェアフィーをシェア、って早口言葉みたいだ。

683:デフォルトの名無しさん
08/04/11 01:20:21
Wiki(pedia)って感じだな。

684:デフォルトの名無しさん
08/04/11 10:39:52
詳説 正規表現 第3版の訳本がやっと出るっぽいな
原書あるから要らんけど…

685:デフォルトの名無しさん
08/04/11 18:59:29
Perl5.8.2です。
「あかスまのた゚」「゙ナをフaき」のように、
規則性のない全角かな・カナ、半角かな・カナ(濁点半濁点含む)をマッチさせたいのですが
例えば上の例ですとどのようなパターンで記述すればいいでしょうか?
文字コードは何でも構いませんが、可能ならeuc-jpが良いです。
よろしくお願いします。

686:デフォルトの名無しさん
08/04/11 19:16:59
半角英字が混じってるように見えるが、
それは排除しなくていいのか?

Ruby なら EUC にして 0x00 ~ 0x7F を排除すればいいだけだと思うが、
規則性の有無のチェックが必要とかなると正規表現では難しいかと。

687:デフォルトの名無しさん
08/04/11 19:20:26
あ、全角英字や漢字も除くというか、
本当に仮名のみにするのか。
仮名の範囲の端同士で [ヲ-゚ぁ-んァ-ミム-ヶ] みたいにすればいいと思うよ。
Ruby なら文字コード指定できるから、EUC でそうやればいい。

688:デフォルトの名無しさん
08/04/11 20:59:19
どうだい本当にそういうことか?
文字化けしてる領域をまるっと抽出したいってことだと思うんだが
もしそうなら>>306みたいに先読み使えばどうにかなると思う

689:デフォルトの名無しさん
08/04/12 00:19:19
URLリンク(www.oreilly.co.jp)
第3版が出るようだけど,PHPイラネなら買うほどでもないのかな

690:デフォルトの名無しさん
08/04/12 01:42:47
性器にperlを埋め込みたいんですが、腕のいいクリニックをご存知ありませんか?

691:デフォルトの名無しさん
08/04/12 02:36:34
埋め込むなら、perlではなくpearlをどうぞ。

692:デフォルトの名無しさん
08/04/12 05:25:33
さすがにRuby埋め込んでくれるところはないんでしょうか?

693:デフォルトの名無しさん
08/04/12 08:45:46
ないね
Pythonなら最初から生えてるのにね

694:デフォルトの名無しさん
08/04/12 10:20:33
朝になるとEiffelです。

695:デフォルトの名無しさん
08/04/12 19:18:06
35の春。はじめての C 。


696:デフォルトの名無しさん
08/04/12 22:01:15
haskell! haskell!


697:デフォルトの名無しさん
08/04/13 14:15:30
正規表現でパスワードのような文字列にマッチさせることは可能でしょうか?
条件
・英字(大文字か小文字)と数字を必ず含む
・英字のみはマッチしない
・数字のみもマッチしない

^\w+$
はもちろん駄目で
^[a-zA-Z\d]+$
ももちろん駄目でした・・・

698:デフォルトの名無しさん
08/04/13 15:36:33
これでどうですか?
(\w+(\d*\w*)*|\d+(\w*\d*)*)

_と-の扱いは?

699:デフォルトの名無しさん
08/04/13 17:01:14
> _と-の扱いは?

ああ、それもいるのか・・

700:デフォルトの名無しさん
08/04/13 17:07:31
先読み使える言語なら、それで一発では?

701:デフォルトの名無しさん
08/04/13 17:26:35
\d+(\d|\w|[-_])*\w+(\d|\w|[-_])*|\w+(\w|\d|[-_])*\d+(\d|\w|[-_])*|[-_](\d|\w|[-_])*\w+(\d|\w|[-_])*

702:デフォルトの名無しさん
08/04/13 21:26:46
教えて欲しいのですが、この /(?<=\{\s*)/ が perl に怒られるのはなぜでしょうか
* をはずすと特に問題は無いのですが

703:デフォルトの名無しさん
08/04/13 21:33:31
>>702
エラーメッセージでてるだろ。
そこに理由が書いてあるから読めよ。

704:デフォルトの名無しさん
08/04/14 07:33:27
>>701
サンクス試してみる。

705:デフォルトの名無しさん
08/04/14 08:25:50
別々にマッチした方が良くね?



706:デフォルトの名無しさん
08/04/14 22:46:37
だな。おれもそうする。

どんなプログミング言語で書いてるのかわからんけど
if ($password =~ m/^[A-Za-z0-9_\-]+$/
&& $password =~ m/[0-9]/
&& $password =~ m/[A-Za-z]/) {
  ほげほげ・・・
}
みたい書いたほうが、どんな言語にも応用がきくし
あとのメンテナンスも楽だしな。
どうしても無理やり1つにまとめなきゃいかん事情があるんなら別だが。

707:デフォルトの名無しさん
08/04/16 01:54:40
VC++ 2005、WinXPで開発をしています。
正規表現を扱えるライブラリを探しています。
出来れば、charとwchar_tの両方に対応しているものが欲しいと思っています。
片方なら、boostでいいと思うのですが……

どなたか、ご存知の方教えてください。

708:デフォルトの名無しさん
08/04/16 07:19:25
"abc__def__ghi__jkm"という文字列があるとして、
この文字列中の「__」を任意の数だけ半角スペースに置換するという場合
(1が指定されたなら1つ、2が指定されたなら2つというように)、どのような記述になるのでしょうか。
使用言語はPerlです。

oオプションを指定して評価を1度だけにし、ループで回す、という方法は考えたのですが、
可能なら正規表現のみで完結させたいです。

どなたかご存知でしたら教えていただけないでしょうか。
よろしくお願いします。

709:デフォルトの名無しさん
08/04/16 07:48:59
perlなら_でsplitしてjoinしたほうが速いような。

710:デフォルトの名無しさん
08/04/16 10:45:45
正規表現でバッチ処理的な事したとき最速なのってやっぱperlか?

711:デフォルトの名無しさん
08/04/16 13:58:17
ruby

712:デフォルトの名無しさん
08/04/16 14:20:48
まじか。ruby早いのか

713:デフォルトの名無しさん
08/04/16 14:24:48
perlの方が糞速いよ

714:デフォルトの名無しさん
08/04/17 04:26:31
2ちゃんではurlを書き込むと自動的にリンクが貼られますが、
2ちゃん外のurlだとhttp://がURLリンク(ime.nu)に置換されます
urlが2ちゃん内か外かを判断するにはどうやっているのでしょうか。

urlかどうかを判断し、リンクを貼るところまではネットで調べて↓のようにできたのですが、続きがわかりません。
ereg_replace("(http)(://[[:alnum:]\S\$\+\?\.-=_%,:@!#~*/&]+)","<a href=\"\\1\\2\">\\1\\2</a>",$str);

どうかよろしくお願いします。

言語はPHPです。


715:デフォルトの名無しさん
08/04/17 07:00:53
2chの中だったら
2ch.netというURLが必ず入るわけだから、
それが含まれている文字列にマッチするかしないかを確認すればいだけじゃないの

716:デフォルトの名無しさん
08/04/17 07:37:42
2ch.netだけだと、
URLリンク(www.example.com)
がマッチしちゃうよ

717:デフォルトの名無しさん
08/04/17 07:41:25
じゃぁ
//[^/].*2ch.net/

718:デフォルトの名無しさん
08/04/17 16:16:02
itemが必ず入ってい<mark>~</mark>を検索する方法はありましか?
その場合itemがない<mark>~</mark>があり、これはヒットさせたくありません。

javaです。
正規表現は:<mark>.*?</mark>(?<!item.*?)

<mark> item </mark>  → うまくいく

<mark> item </mark> <mark> </mark> <mark> item </mark>  → うまくいかない
↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑_↑↑↑↑↑↑↑↑↑
1個目のヒット_____________2個目のヒット

719:デフォルトの名無しさん
08/04/17 18:03:59
それがXMLデータなら明らかにミスアプローチだと思う。

720:デフォルトの名無しさん
08/04/17 19:42:27
>>718
そこに書かれている条件だけなら、
<mark>[^<]*item[^<]*</mark>
で上手くいくかもしれない。

<marK>とかのタグが入れ子するかもー、ということなら正規表現じゃムリ。



721:デフォルトの名無しさん
08/04/17 19:57:24
正規表現でファイルに文字が存在するかチェックしています。
存在していたら中の文字を返す仕様です。
/(<grep\s*([^\s]+)\s*-\s*([^\s]+)\s*>.+<\/grep>/
<grep foo-../hoge/google.txt>マッチします。</grep>
この場合、../hoge/google.txt内fooという文字があったらに「マッチします。」を返します。

この応用で質問なのですが、
<grep foo-../hoge/>aaa<grep foo-./foo/>aaaaa</grep>aa</grep>
という文のように入れ子の場合、
<grep foo-../hoge/>~</grep>と
<grep foo-./foo/>~</grep>で
2回チェックしたいのです。

この場合、最長マッチでできるのですが以下のような場合も考えられるのでどうすればいいか困っております。
<grep foo-../hoge/>aaaaa</grep>
<grep foo-./foo/>aaaaa</grep>

どんな書き方がいいでしょうか?
ご鞭撻のほどよろしくお願いします。

722:デフォルトの名無しさん
08/04/17 20:00:02
</grep>がどっちの</grep>を指してるのかわかりづらい
あとそういう入れ子構造は正規表現の苦手な分野だから、ほかの手が使えるならそっちのがいい

723:デフォルトの名無しさん
08/04/17 20:21:25
教えてください。
正規表現じゃないアスタリスクってなんていうんですか?
たとえばsyslog.logから始まるファイルを表示するとき

$ ls syslog.log*

こんな感じで見てるんだけど、このときの*はメタキャラクタ?
また、こういうときに正規表現を使ってみたい場合はどうすればいいですか?

724:デフォルトの名無しさん
08/04/17 20:42:30
わいるどかーど

725:デフォルトの名無しさん
08/04/17 21:04:26
ls | grep 正規表現

726:デフォルトの名無しさん
08/04/17 21:16:35
ありがとうございます。
なるほど、確かにシェルのワイルドカードですね。
納得しました。

727:721
08/04/17 22:14:46
>>722
ありがとうございます。
C言語やJAVAなんかの入れ子のifのような感じといえばわかりやすいかもしれません。
こういう処理はどうやればいいのでしょうか?
正規表現とは関係ないですがよろしくお願いします。

728:デフォルトの名無しさん
08/04/18 00:05:52
>>727
パーズして構文木を作って、構文木に対していろいろ処理をするのがふ
つう。
楽をしたいなら、その変な文法をやめてXMLにしてしまえ。DOMにしてか
らイロイロすればいい。


729:デフォルトの名無しさん
08/04/18 18:40:10
>>728
ありがとうございます。
正規表現でやりたいです。

テーブルタグの入れ子処理みたいなものは正規表現では難しいのですね。。。
<table>
 <tr>
  <td>
   <table>
    <tr>
     <td></td>
    </tr>
   </table>
  </td>
 </tr>
</table>

730:デフォルトの名無しさん
08/04/18 21:07:38
普通の正規表現では不特定回数の入れ子を扱えません。

731:デフォルトの名無しさん
08/04/19 11:38:21
正規表現を基礎から学習したいのですが、チュートリアル・サイドで
人妻がどうのとか、女子高生がどうしたとかが概説に載っていて嫌な気分になりました。

そこできちんとした書籍を購入しようと思いますがオススメはありますでしょうか?
ポケット・リファレンスあたりかな?

732:デフォルトの名無しさん
08/04/19 11:48:12
正規表現って学習するようなものか?
たしかに、正規表現を何か難しいもののように扱って、
「正規表現が分かる!」とか謳ってる本は巷に溢れてるけど、
役に立つと思ったのは一冊もないね。

処理系のリファレンスでも読んで試行錯誤するのが一番いいと思う。

733:デフォルトの名無しさん
08/04/19 11:59:21
さっそくご回答いただきありがとうございます。
なるほど、モヤモヤがすっきりしました。
とりあえずエディタのヘルプで生きていきます。


734:デフォルトの名無しさん
08/04/20 00:56:54
普段使いする1冊。
URLリンク(www.amazon.co.jp)
一応理論的な説明もなくはないけどメインはリファレンス。
簡単な例(任意の1文字にマッチさせるとか)から
進んだ内容(先読みとか)まで幅広くてグッド。

735:デフォルトの名無しさん
08/04/22 09:23:34
詳説正規表現第2版の何が不満なのか

736:デフォルトの名無しさん
08/04/22 09:30:00
もうすぐ3版が出るところだろ

737:デフォルトの名無しさん
08/04/22 16:29:32
今週

738:デフォルトの名無しさん
08/04/22 23:25:14
公式で買ったらもう届いたw

739:デフォルトの名無しさん
08/04/23 04:50:49
2版だってまだ読み終わってないよorz

740:デフォルトの名無しさん
08/04/23 08:33:46
>>738
マジかよwいいなー

741:デフォルトの名無しさん
08/04/23 23:54:46
>>738
書評頼むよ
2版からどう変わってた?

742:デフォルトの名無しさん
08/04/24 22:03:25
教えてください
地図のアドレスなのですが
URLリンク(abc.com)
これを下のように置換したいのですがどうやればよいのでしょうか?
x=とy=の値を取り出して
URLリンク(def.com)
のようにしたいのですがよろしくお願いします。

rubyを勉強中です。

743:デフォルトの名無しさん
08/04/25 07:01:17
URIはパーサ使えばいいやん

744:デフォルトの名無しさん
08/04/25 09:13:28
>>742
'&'(と'?')でsplit()してからの方が楽だったりするかな。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch