1read 100read
2011年10月1期プログラム正規表現 Part9 TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
perlとかで便利なツール
おまえらUMLのモデリングツール何使ってますか?2
Java勉強するから支援おね
ECMAScript デス 4


正規表現 Part9


1 :11/12/11 〜 最終レス :12/01/01
正規表現(Regular Expression)スレです。
質問する場合は必ず実装言語や処理系ソフトウェア名を示してください。
正規表現 Part8
http://hibari.2ch.net/test/read.cgi/tech/1301067486/

2 :

犬猫子供を出せば、馬鹿は見るだろ?
 某テレビ局在日社員

3 :
◆関連サイト
正規表現メモ
http://www.kt.rim.or.jp/~kbk/regex/regex.html
Perl正規表現雑技
http://www.din.or.jp/~ohzaki/regex.htm
Regular Expression(Riue ちゃんの正規表現講座)
http://www.sixnine.net/regexp/
正規表現パズル
http://www.geocities.jp/oraclesqlpuzzle/regex/
詳説 正規表現
http://www.oreilly.co.jp/books/4873111307/
正規表現プログラミングFAQ
http://capslockabcjp.kitunebi.com/faq.html
JScript 正規表現の概説
http://msdn.microsoft.com/library/ja/script56/html/js56reconIntroductionToRegularExpressions.asp
.NET Framework 正規表現言語要素
http://msdn.microsoft.com/library/ja/cpgenref/html/cpconregularexpressionslanguageelements.asp
【 初心者 】 正規表現 【 入門 】
http://funcchan.blog16.fc2.com/

4 :
◆関連スレ
[UNIX板] 正規表現
http://pc12.2ch.net/test/read.cgi/unix/1039165754/
[WebProg] 正規表現道場
http://pc11.2ch.net/test/read.cgi/php/1168450843/
◆前スレ
[1] http://pc8.2ch.net/test/read.cgi/tech/1062152374/
[2] http://pc8.2ch.net/test/read.cgi/tech/1131028296/
[3] http://pc11.2ch.net/test/read.cgi/tech/1156413899/
[4] http://pc11.2ch.net/test/read.cgi/tech/1186030400/
[5] http://pc12.2ch.net/test/read.cgi/tech/1212498448/
[6] http://pc12.2ch.net/test/read.cgi/tech/1241537764/
[7] http://hibari.2ch.net/test/read.cgi/tech/1268979408/
[8] http://hibari.2ch.net/test/read.cgi/tech/1301067486/

5 :
スルーされにくい質問のテンプレと例
●正規表現の使用環境
Java1.5
●検索か置換か?
検索
●説明
各行の1番目のAまでを検索したい
●対象データ
ABCA
BCAA
CABA
●希望する結果
ABCA
^
BCAA
^^^
CABA
^^

6 :
^.*?A

7 :
>>6
どうした?

8 :
ただの5に対する解答例なんじゃないの

9 :
つか
●希望する結果
ABCA
^
BCAA
^^^
CABA
^^
これわかりにくいだろ
アンダーラインのつもりだったのかよ

10 :
アンダーラインのつもりであることはわかるだろ。

11 :
^^;

12 :
>>939
perlのオプションが2種類あることを知らないで適当書いてしまいました、申し訳ない..
>>998
ご指摘ありがとうございました

13 :
preg_match関数
http://jp2.php.net/manual/ja/function.preg-match.php
>flags には以下のフラグを指定できます。
>PREG_OFFSET_CAPTURE
>このフラグを設定した場合、各マッチに対応する文字列のオフセットも返されます。 これにより matches の値は配列となり、 配列の要素 0 はマッチした文字列、 要素 1は対象文字列中におけるマッチした文字列のオフセット値 となることに注意してください。
PHPの話です。
この、PREG_OFFSET_CAPTUREという機能がすごく有り難いのですが、、
この機能は、preg_match関数だけにしかないのでしょうか?
PHPで他にもこの機能を持った関数はあるのでしょうか?
マルチバイトの関数でこの機能があれば有り難いのですが、なんかないですよね?

14 :
ググれ

15 :
性器表現

16 :
>>13
このスレに常駐してる奴にそんなこと分かるわけないだろ。

17 :
PHPはmb系列は鬼車なんだね。PCREしか使わないから知らなかった。

18 :
>>12
鬼車の再帰の作り方教えて

19 :
>>18
鬼車のマニュアル: http://www.geocities.jp/kosako3/oniguruma/doc/RE.ja.txt
技評の記事(3ページ目): http://gihyo.jp/dev/serial/01/ruby/0006

20 :
日本語で書かれたサイトはないの?

21 :
>>20
>19はどちらも日本語だと思うが。

22 :
なるほど、pcreの再帰は使い勝手悪いけど鬼車の再帰は使い易い。確かに鬼車なら簡単に書けますね。
括弧の数を数えるコードを書くほうが効率悪いかも。

23 :
以下の正規表現でよろしいでしょうか?
ご意見を頂ければ幸いです。
/(-1)|^[\d]+/
●正規表現の使用環境
PHP Version 5.1.6
●検索か置換か?
検索
●説明
金額の数値チェックですが、
負の数である-1のみ入力を許可します。
0は許可します。
-1, 0, 1, 2, ..., 10, ..., 100,
●対象データ
数値(金額)
●希望する結果
× -10

× -2
○ -1
○ 0

○ 10
○ 11

24 :
>>23
\A(?:-1|0|[1-9]\d*)\z
○0
×00
×000

25 :
>>23
数値をなぜわざわざ正規表現でチェックするの?

26 :
>>25
その方がif文より速い、と思い込んでるんだろうね

27 :
あー、そうか、単純にif文で文字列比較すればいいのか…

28 :
●正規表現の使用環境 windows google chrome
●言語JavaScript
●置換
●説明
以前このスレで教えてもらった表現が仕様変更で使えなくなったので再び尋ねにきました
以下のようにURLを置換する正規表現を教えてください
http://*.bp.blogspot.com/*/*/*/*/s*/*

http://*.bp.blogspot.com/*/*/*/*/s2048/*
.replace(/^(http:\/\/[^/]+\.bp\.blogspot\.com\/(?:[^/]+\/){4)[^/]+\/([^/]+)$/i,"$s2048")

29 :
\sとホワイトスペースとされている[ \n\r\t\v\f]を比べたら違っていた。
\sには\vが含まれてない。
ホワイトスペースは明示的に指定した方が良いな。

30 :
>>29はPHPの最新版。
実際には\vが出てくる機会は無いんだろうけど。
万が一使われて不具合でる場合に、速度犠牲にしても明示的な指定が良いことはある。

31 :
>>28は自力で分かりましたので撤回します。

32 :
>>27
数値比較だろうがw

33 :

要件でのチェック処理はjavascriptでした。
改修前のソースが正規表現で書かれていたので、そこに固執していました。
ありがとうございます。
var num; // 画面からの入力
if ( num >= -1) {
  // 入力値OK
} else {
  // 入力値NG
}

34 :
文字が入力されたらどうするんだよ。

35 :
>>34
>●対象データ
>数値(金額)

36 :
1,000,000の点は考えなくていいのかな?

37 :
桁区切りのカンマ、小数点は入力時にエラーとして再入力を促します。

38 :
それなら楽勝だね、お疲れ。

39 :
>>37
変換(削除)してやれよ、それくらい。

40 :
それは外部者が言うことじゃない。

41 :
●正規表現の使用環境
c#
●検索か置換か?
検索
●説明
一番長い数字の連続を検索したいです
●対象データ
hogehoge120_hoge001218hoge1
●希望する結果
001218

42 :
\d+で数字列検索してプログラム使って最長判定
正規表現だけじゃ無理

43 :
string s = "hogehoge120_hoge001218hoge1";
string max = "";
foreach (Match m in Regex.Matches(s, "\\d+"))
  if (m.Value.Length > max.Length)
    max = m.Value;
Console.WriteLine(max);

44 :
>>42-43 ありがとん
やってみます。

45 :
人に利用される馬鹿が教えてくれるスレ

46 :
すみません。正規表現の
^\sd{4}$
とはどういう意味を表しているのでしょうか?

47 :
行頭があって空白文字があってdが4つあって行末

48 :
>>47
ありがとうございます。
ということは
[ 1234]
のような値でしょうか?

49 :
なぜd だけ そのままなのww

50 :
>>48
0-9のどれか1文字なら d じゃなくて \d
テンプレのリンクから一番やさしそうなの見つけて読んで

51 :
>>48
そういうのを「思い込み」と言う

52 :
>>50
ありがとうございます。
ということは
[ dddd]
なんですね。ということはこれはバグのような・・

53 :
ばっかじゃないの。

54 :
試してみました。[ dddd]がhitしてしまいました。
Dim oReg
Set oReg = New RegExp
oReg.IgnoreCase = False
oReg.Pattern = "^\sd{4}$"
If oReg.Test(" dddd") Then
msgbox "hit!"
Else
msgbox "ng"
End If

55 :
頭がバグってきた

56 :
試すだけなら
print "hit!" if (" dddd" =~ /^\sd{4}$/);
で十分。
べーしっくは大変ですなw

57 :
すぽぽーん!!

58 :
マッチって言おうぜ、ヒットって野球かよ。

59 :
>>58
マッチしてるんだからヒットで良くね?

60 :
トシちゃんでも何でもいいよ

61 :
こんばんわ、膝方 歳三です。
呼んだ?

62 :
ナウなヤングが多いスレですね

63 :
ヒットじゃなくて三振だな

64 :
鬼車使用
0001233C,ソレ・ナンテ・エロゲ<TAB>0001233C,Sore nante eroge
000123DD,買ってこい<TAB>000123DD,iyadesu
000123DD,なんだコノ・モノズキ<TAB>000123DD,Daisuki
<TAB>は実際にはタブに置き換え
こんな感じのタブと,で区切られたテキストがあるのですが
//ここから
0001233C,ソレ・ナンテ・エロゲ<TAB>0001233C,Sore nante eroge
,ソレ
,ナンテ
,エロゲ
000123DD,買ってこい<TAB>000123DD,iyadesu
000123DD,なんだコノ・モノズキ<TAB>000123DD,Daisuki
,なんだコノ
,モノズキ
//ここまで
<TAB>は実際にはタブに置き換え
と、したいのですがどのようにすれば正規表現で置換する出来ますか?
"・"の数がまちまちなのと、行全体は残しつつ次の行に分割することが出来ず悩んでいます

65 :
>行全体は残しつつ
行全体を同じ物で置換

66 :
>>64
鬼車に置換機能はないというのはおいとくとして、
数が不定という点で正規表現だけではどうにもならんな。
$1とかで取り出す以上、上限を決めるとかしないと。

67 :
>>65
()の中に()も出来るのか…なんでできないと思い込んでた。
行全体の方は解決できました。ありがとうございます。
>66
理解できてませんでした。サクラエディタ使ってます。
"・"の数は 無し,1個,2個 のいずれか。
現状でこんな感じのものを作ってみたのですが変な所で切れたり"・"が残ったりします
空白行は消すのであっても構いませんのですが、良い方法は在りませんか?
([0-9]{2}[a-zA-Z0-9]{6},(.+)・(.+)・?(.+)\t.+)
\1\r\n,\2\r\n,\3\r\n,\4\r\n
//ここから
0001233C,ソレ・ナンテ・エロゲ 0001233C,Sore nante eroge
,ソレ・ナンテ
,エロ
,ゲ
//ここまで

68 :
^([^,]+,([^・\t]+)・([^・\t]+)(?:・([^・\t]+))?\t.+)$

69 :
>>68
希望通りの分割が出来ました
良く分からない所があるのですがもう一度解説している所を読んで理解したいと思います
有難うございました

70 :
 [^・\t
顔文字に見えた。
堅め開けた、しわくちゃの老人

71 :
正規表現を使って、@マークが先頭にある半角数字に処理をかけたいと思っています。
ex.) @12345
ただ、データの中に「<a href=”〜”>@12345</a>」のようにHTMLタグのリンクタグが付与している場合があり、その場合でもマッチするようにしたいです。
「<a href=”〜”>@〜</a>」でも「@〜」でもマッチするようにするにはどうすればいいのでしょうか?

72 :
<a href="[^"]+">@\d+</a>|@\d+
こういうことかな?
いまいち質問がわかりづらい
次に質問するときはテンプレつかってくれ

73 :
鬼車なんてあったんだ隠語かと思ったら正式名称か

74 :
>>71
@\d+ でいずれもマッチするが、簡単すぎてどこで躓いているのかよくわからん

75 :
>>74
先頭じゃない場合もあるからじゃない?

76 :
ごめん行頭と読み違えた

77 :
>>73
このスレにいてRuby 1.9に使われてる正規表現エンジンの名前を知らんとはな。
スレのテンプレに、主要な正規表現ライブラリの紹介があってもいいかもしれない。

78 :
>>77
そんなのべたべた貼っても読まねぇ

79 :
正規表現のエンジンも色々あるからな
だからこそ環境書けと言われるワケで
逆に環境以上のことは蛇足じゃねーの

80 :
質問用テンプレということではないのだが。

81 :
このスレのレベルの低さは前スレ見れば分かる。回帰も知らないゴミの集まり。

82 :
>>72
無事希望通りなものができました。
また質問が出たときはテンプレ使って質問しようと思います。
ありがとうございました。

83 :
●検索か置換か?
置換
●説明
reverse関数のように、文字を逆順にする
対象は半角のみで、全角は使わないので考慮しないで構わない
●対象データ
114514
810snpi
go
●希望する結果
415411
ipns018
og

84 :
つreverse関数

85 :
C#で以下の文字列lineからURLを抽出したいと思っています。
 The document has moved <a href="http://www.hoge.com/">here</a>.
Match m = Regex.Match(line, "href=\"(http://\S)\"", RegexOptions.IgnoreCase);
↑そこでそういうプログラムを組んでみたのですが正規表現の部分でエラーが発生してコンパイルエラーになってしまいます。
正しくプログラムするにはどうしたらいいでしょうか?

86 :
"href=\"(http://\S)\""はリテラル文字列だろ?
"href=\"(http://\\S)\""が正しい。

87 :
\\

88 :
間違えた。
"href=\"(http://\\S+)\""

89 :
urlを抽出する際に、httpsを考慮する必要はありませんか。

90 :
(https?://\\S+)
そこまで考えるなら、パーサのHTML Tidyを使う。

91 :
みなさんアドバイスありがとうございます。
\をもう一つ付けることでコンパイルに無事成功しましたm(_ _)m

92 :
+もつけないとマッチしないよ。。。

93 :
\Sを使うこと自体間違ってる。誤爆の可能性あるよ。

94 :
つうかC#なら@""使え

95 :
そういや@""の中で"を使うにはどうしたらいいんだろう?

96 :
エスケープできないの?
記号としての\を使いたい場合、\\になるように、
\"とかが用意されているのでは。

97 :
@"printf(""hello"")" みたいに " を二回続ける(スレチ)

98 :
詳細正規表現って本5040円もするけど安く手に入れられないかな。

99 :
>>98
アマゾンに\4,000(送料別)の中古があったよ

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
perlとかで便利なツール
おまえらUMLのモデリングツール何使ってますか?2
Java勉強するから支援おね
ECMAScript デス 4