[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 05/09 15:05 / Filesize : 175 KB / Number-of Response : 729
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

正規表現 Part6



1 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 00:36:04 ]
正規表現(Regular Expression)スレです。

質問する場合は実装言語や処理系ソフトウェア名を示しておくと話が早いです。

【 前スレ 】 正規表現 Part5
pc12.2ch.net/test/read.cgi/tech/1212498448/

51 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 22:40:57 ]
いや、違うな。
/\d{6}(\d[1-9]|[1-9]\d)/

52 名前:デフォルトの名無しさん mailto:sage [2009/05/18(月) 22:51:45 ]
>>47
マルチかよ

53 名前:49 [2009/05/18(月) 23:29:28 ]
>>51
ありがとう

54 名前:デフォルトの名無しさん mailto:sage [2009/05/20(水) 06:57:22 ]
/\d{6}(?!00)\d\d/

55 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:03:24 ]
言語:Java

文字列:
$:hogeA;
$:hogeB;

これをpattern&matchさせるにはどうすればいいのでしょうか?

56 名前:55 mailto:sage [2009/05/22(金) 17:23:55 ]
質問内容を間違えました。

文字列:
${hogeA}
${hogeB}

これをpattern&matchさせるための正規表現は \\$\{.*.} でOK?
(Eclipse 3.2 JDK 1.6でエラーが出るorz )

57 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 17:25:45 ]
なんなのそのバックスラッシュ

58 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:18:22 ]
「pettern&match」とは何ぞや? アンド?

59 名前:55 mailto:sage [2009/05/22(金) 18:23:06 ]
>>58

Patternオブジェで正規表現コンパイルして、
Matcherのfindメソッドで一致を確認したいのです。



60 名前:デフォルトの名無しさん mailto:sage [2009/05/22(金) 18:27:04 ]
$\{.+\}
javaはしらん

61 名前:55 mailto:sage [2009/05/22(金) 18:56:03 ]
自己解決しました。
Matcher#groupで取得するため
(\\$\\{.*.\\})でうまくいきました。
>>60 つ旦 ありがとう。

62 名前:デフォルトの名無しさん mailto:sage [2009/05/26(火) 17:18:21 ]
<img src="./topimg_0905.gif" alt="テキスト" border="0" />

PHPで上のようなイメージタグからtopimag_に続く4桁の数字とalt=""の中身のテキスト(全半角マチマチ文字列)のみを
それぞれ$gifと$altに抽出したいのですがよい方法はないでしょうか

63 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 04:14:06 ]
そういうのはHTMLパーサ使った方がいいって言ってるだろうが。


64 名前:デフォルトの名無しさん mailto:sage [2009/05/27(水) 18:16:27 ]
UNIXで、与えられたパスが絶対パスである条件って
$(|~\S*)?/\S*
でいいですか?
思いがけないパターンがありそうで怖いんですがどうでしょうか

65 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 09:25:40 ]
「先頭がスラッシュか」だけじゃ駄目?

66 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 10:40:58 ]
~ユーザ名/も絶対パスとみなしたいんだろ

67 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 09:42:09 ]
それだったら~/も含める必要がありそうな。

68 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 10:03:33 ]
知らないならレスしないでください

69 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 18:15:39 ]
>>67
~\S*だから入るんじゃないのか




70 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 18:16:50 ]
^[~/]でもよさそうな気もするな

71 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 19:35:46 ]
IMOX って空白を含むディレクトリ名ってだめだっけ?

72 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 19:36:52 ]
困ったことに、使えるねぇ。

73 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 19:37:02 ]
キーボードが1列ずれた。すまんw
IMOX じゃなくて UNIX って書きたかった

74 名前:デフォルトの名無しさん [2009/05/29(金) 23:31:42 ]
何事もなく返答する>>72に萌えた

75 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:18:03 ]
よろしくお願いします。

現在Yahoo!pipes(ttp://pipes.yahoo.com/pipes/)を使っているのですが、
pipesの中でデータをURLエンコードしたいと思っています。
そのような機能はないので、正規表現(マニュアルによるとPerlライク)でやろうと思っているのですが、
Perlの関数を使えないのでunpackを使うやり方ができません。

純粋な正規表現のみでURLエンコードはできるものなのでしょうか。
修飾子として使えるのは「gsmi」のみです。


76 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:32:16 ]
>純粋な正規表現のみでURLエンコード
正規表現を利用してなら可能だろうだけど、正規表現のみじゃ無理
なんつーかノリも必要なペーパークラフトをハサミだけで作れって感じだ
URLっていう型紙からデータを切り抜くだけでどうやってURLエンコードを組み立てるよ

77 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:34:11 ]
/\x00/%00/g
/\x01/%01/g

/\xFF/%FF/g

78 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:46:46 ]
>>76
ですよね・・・

>>77
うおっ!

79 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:05:44 ]
>>77
それやると % と 0-F の文字が置換されないか?



80 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:21:31 ]
深く考えずに書いたネタにマジレスされても困るんだが、本気でこのアプローチを採用するなら、
0-9A-Fは置換する必要ないし、%を一番頭に持ってくればいい。

81 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 19:31:17 ]
行頭から6文字目までをマッチさせるにはどう記述したらよいでしょうか?

82 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 20:29:36 ]
^.{6}

83 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 21:22:45 ]
>>82
助かりましたありがとうございます

84 名前:デフォルトの名無しさん [2009/06/08(月) 23:24:52 ]
FlashのActionScript3.0(WinXP-Pro)です。

文字列中で特定の文字列のみに色付けをしようとしていますが、目的の文字列
以外でも色が付き困っています。

例えば、『名無し』という文字列のみを青色にしようとすると、独立した文字列
 名無し
はOKなのですが、「デフォルトの名無しさん」でも『名無し』が青色になってしまい
ます。

A名無しB という場合(前または後ろに不要な文字がある場合、つまり他の文字列
に組み込まれた場合)は対象から外し、単独の場合のみを対象したく思っています。

これに適した正規表現はありますでしょうか?


85 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:43:22 ]
^名無し$

86 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 00:22:19 ]
>>85
有難うございます。しかしながら、質問が不十分でした。
確かに独立した文字列は許可したいのすが、それ以外に A名無しB で
AまたはBが
1) 半角のスペースの場合
2) 半角の左括弧 ( の場合
3) 改行の場合
4) ピリオドの場合

に名無しを青色にしたく思っています。
当初、キャラクターコードとif文で分岐しようとしましたが煩雑になったので
正規表現を利用しようと思いました。

こんな場合はどうでしょうか?


87 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:48:17 ]
不特定の半角英数字と半角記号でできている半角文字列の中から (' ') に挟まれた数列だけを残して他を削除したいのですが方法はないでしょうか

例)
234hbhkltgfokdlthL+POL+PL>?*|{?('54653');
の中から54653だけを取り出し他を削除

※不特定文字列内において、 (' や ') は取り出す予定の数列を挟む場所以外では現れません

PHP

88 名前:デフォルトの名無しさん [2009/06/09(火) 13:17:17 ]
('...') は複数出現するのかな?一応それを考慮して

$a = preg_replace('/(?:(?!\(\').)*(?:\(\'(\d+)\'\))?/', '$1', $a);

89 名前:87 mailto:sage [2009/06/09(火) 13:47:46 ]
>>88
ありがとうございます
('nnn')は1カ所しか出てきません
自分で応用できないかやってみたんですがムリでしたw
1カ所しかでてこないバージョンを教えてくださいw



90 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:43:57 ]
PHPの書式は分からないけど、
\('(.+)'\)
で検索して、後方参照で\1だけ残せば良いんじゃない?

91 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:57:23 ]
>  \('(.+)'\)
Vサインしてるクマたんみたいでかわいい

92 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 11:32:12 ]
submatchでグループ化したものを抜き出せば良いんでない?

93 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 13:39:54 ]
(V)o¥o(V) フォッフォッフォ

94 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 08:14:41 ]
(a+b) - (b - c)

みたいな文字があって
()の中をそれぞれ取り出したい場合

(.*)ってやると
一番最初の(と最後の)でも一致してしまう
させたくないんだけどどうすればいいの?

環境はVB.NET

95 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:05:24 ]
>>94
特殊な意味を持つ文字は\でエスケープする

\([^)]*\) かな

96 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:14:48 ]
>>94
VB.NETはよく知らんが、大体「.*」ってやると「よくばり」モードになるぞ。
「よくばり」モードはその例の場合だと途中の括弧も飲み込んじゃって、
目一杯取ってくるから、「.*?」ってやるといい。
「?」をつけると「けちけち」モードになって、必要最小限しか取ってこない。

97 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 09:55:28 ]
>>94
最短一致でググるといいぜ

98 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 11:46:17 ]
非欲張り、という表現が一般的じゃないかと思うのだが。

99 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 11:55:08 ]
正しさはともかく一般的なのは「最短一致」

"最短一致" に一致する日本語のページ 約 2,610 件
"非欲張り" に一致する日本語のページ 約 373 件



100 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 14:21:42 ]
欲張りマッチの事、貪欲マッチと呼ばない?

101 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 00:00:57 ]
>>95で出来た
ついでにもう1つ
英数字の連続が5文字以上を一致させたい場合はどうすれば?

102 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 00:38:39 ]
礼の一つも言えんのか

103 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 08:52:01 ]
\w{5,}

104 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 16:57:22 ]
>>95さんありがとう
連続文字は自己解決した
{}の中身を{10}ってやると10文字以上という意味らしい
サンプルだと{10,20}みたいにしか書いてなかったから

105 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 17:11:29 ]
カンマ忘れてるぞ

106 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 18:09:05 ]
>>104
>>103さんが回答出してるのを無視して自己解決も何もなかろう。

107 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 21:01:48 ]
無視したからこそ自己解決なのではないかと。

という混ぜ返しはさておき、
"\w" は(一般的な実装だと)アンダースコアも拾うけどいいのかな。

108 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 12:15:03 ]
アンカ間違ってるだけで>>103を参考に解決したけど
全面採用じゃなかったから自己解決とかぬかしてるだけでは

109 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 12:48:38 ]
ちがうな、恐らくは>102を受けて、「ありがとう」と書いたのだろう。
好意的に解釈すれば、>103を見る前に自己解決したのかも知れん。



110 名前:デフォルトの名無しさん [2009/06/22(月) 11:09:00 ]
C#です
Match match = new Regex("AAA.+?BBB").Match(html);
としてAAAとBBBの間の文字列を抽出したいのですがなぜかできません

Match match = new Regex("AAA").Match(html);
Match match = new Regex("BBB").Match(html);
この二つはうまくいくのですが正規表現の書き方おかしいですか?
ちなみにAAAとBBBはhtmlタグです

111 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 11:28:41 ]
.+? って、1回以上の繰り返しが、あるかないか、という意味を意図してると思うんだけど、
そういう複合はできない。
0回以上の繰り返し .* でマッチさせる。

112 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:03:01 ]
>>111
> .+? って、1回以上の繰り返しが、あるかないか、という意味を意図してると思う
じゃなくて最短一致だろ

113 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:09:27 ]
最短一致です
("AAA".+?"BBB")は実際には
(<div id=\"comments\" style=\"margin-left:6px;margin-top:6px;\">.+?<button id=\"load_comment_button\"")
こんな感じです

114 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:09:34 ]
それだと、 . が改行にマッチしない事は理解してる?

115 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:11:26 ]
>>113訂正

("AAA.+?BBB")
("<div id=\"comments\" style=\"margin-left:6px;margin-top:6px;\">.+?<button id=\"load_comment_button\"")
こうです

116 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:15:40 ]
>>114
そうなんですか!?
どう書き換えればよいでしょうか

117 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:17:44 ]
RegexOptions.Singleline

111はどういう環境を想定してるんだろうね。

118 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 12:25:48 ]
>>117
できました!ありがとうございました

119 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 14:14:00 ]
●正規表現の使用環境
AutoHotkey 1.0.48.03 (Perl 5互換のPCRE)
lukewarm.s101.xrea.com/RegEx.html

●検索か置換か?
置換

●説明
""で囲われている箇所以外の行末コメントを除去したい。

●対象データ
key = value ; ccomment
key = "val ;lue" ; comment

●希望する結果
key = value
key = "val ;lue"

m`n)[\t ]+;.*(?=$) で 無差別除去まではできたんですが後方参照とか条件分岐の方法ががわからず。
key value comment 部はそれぞれ日本語の文字が入る可能性もあるんですが
AutoHotkeyのPCRE自体は2バイト文字が考慮されません(なので[:word:]とかは使えない状態です)
よろしくお願いします。



120 名前:デフォルトの名無しさん [2009/06/26(金) 11:50:32 ]
単純な正規表現は分かるのですが、これはどうすればよいでしょうか?

●正規表現の使用環境
PHP4

●検索か置換か?
置換

●説明
<del>タグにはさまれた任意の文字列を、文字数ぶん●で伏せ字にしたい。

●対象データ
昨日は<del>上戸さん</del>と飲みに行ったが、<del>17,000</del>円も奢らされてしまった。

●希望する結果
昨日は<del>●●●●</del>と飲みに行ったが、<del>●●●●●●</del>円も奢らされてしまった。

121 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 12:04:54 ]
>>120
preg_replace_callback使え。

122 名前:デフォルトの名無しさん [2009/06/26(金) 13:13:30 ]
>>121
そんな便利な関数があったとは、、。
ありがとうございました!

function toFuseji($matches) {
return $matches[1] . preg_replace("/./u", '●', $matches[2]) . $matches[3];
}

preg_replace_callback("/(<del>)(.+)(</del>)/", 'toFuseji', $str);

123 名前:デフォルトの名無しさん [2009/06/26(金) 22:30:17 ]
●正規表現の使用環境
C#2008 Regex.IsMatch

●検索か置換か?
一応検索

●説明
特定の文字列以外があるかをチェックしたい
SQLの話も混じりますが、要はSELECT文の後に
更新や変更するような命令があるかをチェックしたい
のです。
UPDATEとかそれぞれを書いていくのは漏れるかも
しれないのでSELECT、FROM、WHEREあたりを除いて
マッチさせるにはどう書いたらいいでしょうか。
試した文
^SELECT (?!.* [A-Z](?!ELECT |ROM |HERE ))

●対象データ と望する結果
マッチさせたい "SELECT * FROM AAA [UPDATE]"
マッチしたくない "SELECT * FROM AAA UPDATE"




124 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 22:52:35 ]
何らかの処理系なら、else節で処理しちゃう手もある。

125 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 15:21:44 ]
>>123
念のため聞くけど…
まさかこれってSQLインジェクションの対処のためにやってるんじゃないよね?



126 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 19:03:21 ]
『id059385,,』のように、固定文字列idの後にランダムな数列、その後ろにカンマがふたつ格納された変数から、最後のカンマをひとつだけ取り除きたいのですが、
for文で回ってる途中まれに同一変数に『,,,』のようにカンマが3つ連続して出てくることがあり、その場合は取り除きたくないので
原始的に(",,",",",$変数)のようなことができません
あくまで、固定文字列id、その後に数列、その後にカンマふたつという状況でのみカンマひとつ取り除く方法はないでしょうか

PHP5

127 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 19:35:50 ]
最後に2つある時だけ取りたいならこうするかな
preg_replace('/(?<!,),,$/', ',', 'id059385,,');

128 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 19:43:04 ]
>>119
これ難しいね。
excelなら、Instrrev使えばすぐだけど、正規表現だとどうやるんだろ。

129 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 15:35:58 ]
>>119
Perlならこれでいけるっぽいけど、どうかな。だめかな

s/((?:[^;]*?".*?")*[^;]*)(?:.*?$)?/$1/mg



130 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 18:07:37 ]
'"' 自体のエスケープはどうなっているのかと、 Shift_JIS への対応が気になるかな。

131 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 22:27:07 ]
使用環境 WSH 検索
対象データ ^AAA(BBB(CCC)(ddd)))(FFF)(GGG)$

文末の、括弧記号を含まず括弧で囲われたものが連続しているもの
を検索したいけど挙動が違います。

1) /(?:\([^(]+?\))+$/ 検索結果→ (CCC)(ddd)))(FFF)(GGG)
2) /(?:\([^)]+?\))+$/ 検索結果→ (FFF)(GGG)

欲しい結果は2の方です。
文末の$を指定した時は通常とは逆に文末から左へ一文字づつ検索していると考えていいんですか?

132 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 11:23:57 ]
>>131
そりゃ前から読んでもそうなるだろ

>\([^(]+?\)
「括弧の間に開き括弧を含まないもの」だから"(ddd)))"にもマッチする

>「括弧記号を含まず」「括弧で囲われたものが」「連続しているもの」
/(?:\([^()]+?\)){2,}/

133 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 11:24:38 ]
「文末の」を見落としたスマン

134 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 11:51:09 ]
> 文末の$を指定した時は通常とは逆に文末から左へ一文字づつ検索していると考えていいんですか?

そういう動作はしない。


135 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 12:48:16 ]
/unko$/

/unko\r\n/
と同等と考えればわかりやすいだろう
(厳密には違うけど)

136 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 23:16:49 ]
>>128-129
レスありがとうございます。
お礼が遅くてすみません。週末からリロードし忘れてました。

質問後自分なりに頭捻って、((".*?")|;.*(?=$)) , $2 とか無理やりやってたんですが
>129さんのでいけました。特に (?: )の使い方が参考になります。ありがとうございます。

今回の件とは直接関係ないんですが、除外文字列の表記がよくわからずいつも悩みます。
今回の例でいうと コメント文字列が「;」ではなく「 ;」(半角スペース+セミコロン)だった場合とか
(?:(".*?")|[\t ]+;.*(?=$)) , $1 みたいな方法で弾くしかないのかな。

137 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 00:15:50 ]
いや、普通にそっちのほうがシンプルでいいよ
なんであんなに複雑い書いたのかマジ俺イミフ。しにてえ

138 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 23:41:47 ]
.NETの話なんだけど
ttp://msdn.microsoft.com/ja-jp/library/bs2twtah(VS.80).aspx#BalancingGroupDefinitionExample
この例の正規表現がどうして <> の入れ子構造にマッチするのか上の解説読んでもよく分からないので誰か分かりやすく説明してください
「name2 グループと現在のグループの間隔をグループ name1 に格納します。」って文があるけど
この「name2 グループと現在のグループの間隔」っていうのはリンク先の例で言うとどこからどこまでなのかとか
格納するっていうのがつまりどういうことなのか、って言うレベルでさっぱり理解できてない・・・
最後の "(?(Open)(?!))$" にいたっては自分の中で暗号と化してるorz

139 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 03:33:28 ]
わかりやすくは多分無理だな。

Openでカウントが増える。
Close-Open でそのそのカウントが減る。

んで、開きと閉じのアングルブラケットの数がバランスしていれば カウントは0になるので

"(?(Open)(?!))$";

の条件が (?!) ではなくなる。
この(?!) というのは要するに何にもマッチしないもの。




140 名前:123 mailto:sage [2009/07/03(金) 21:01:48 ]
>>124
うまく書けなかったので要素に区切ってチェックすることにしました。
>>125
SQLインジェクションって知らなかったけど、悪意のある入力の
チェックって感じかな?
入力文字はSQL文が前提で、そこまで重い意味合いのチェック
ではありませんでした。
SQLインジェクション対策って普通Regex.Escapeを通すのかな?



141 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 21:07:18 ]
言語によるが、DB系のライブラリにバインディング機能があれば普通はそれを使う。
自作のお手製ライブラリはやめた方がいい。
DBによって攻撃の仕方が違うし、
よく知ってる人が作っていろんな人が使ってるやつの方がやっぱり圧倒的に安全。
詳しくはそれっぽいスレで聞いてくれ。

142 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 21:16:14 ]
>>140
何のためにそんなことをしたいのか分からないが、
ユーザにSQLクエリを入力させて実行させたい、とかいう話なら、
クエリ式に対してチェックをするのではなくて、
データベースの更新が出来ないような権限でクエリを実行すべき。

143 名前:123 mailto:sage [2009/07/03(金) 21:16:15 ]
>>141
そうなんですか。調べてそっちの方向に変えてみます。
よく考えたらSQL文にRegex.Escapeなんて
なんの関係もなかった・・・。

144 名前:123 mailto:sage [2009/07/03(金) 21:20:04 ]
>>143
権限で〜ってのは思ってたんですが、触れない事情がありまして。
普通はそうなんですね。
スレ違いになってきたのでこの辺で終わっときます。
ありがとう。


145 名前:デフォルトの名無しさん [2009/07/04(土) 21:44:21 ]
●正規表現の使用環境
PHP ver 5.2

●検索か置換か?
置換

●説明
カッコ書きのある文章のカッコの中身を取得したい。
たとえば、
カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後
の文章に対して、後方参照で
arr[1] = カッコ書き前()カッコ書き後
arr[2] = カッコ1()カッコ1後
arr[3] = カッコ2()カッコ2後
arr[4] = カッコ3()カッコ3後
と言った感じで取得したい。

試した文
$preTxt = 'カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後';
$match = '/.*(\(.*\)).*/';
preg_match("$match",$preTxt,$arr);
結果
[0]= カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後
[1]= (カッコ3)カッコ2後)カッコ1後)

●対象データ と望する結果
上記記載

すみません。どなたかお願いします。

146 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 22:10:12 ]
HTMLタグの中身を抜き出すのに近いね。
別の自作関数を作っておいて、

arr[1] = \1 & \7
arr[2] = \2 & \6
arr[3] = \3 & \5
arr[4] = \4

なんてのはどうかな。
もっとスマートな方法もあるかもしれないけど、今でもこれ使って動かしてます。


147 名前:デフォルトの名無しさん [2009/07/04(土) 22:43:50 ]
回答ありがとうございます。
でも、多分、俺って、あなたの思っている以上の馬鹿みたい。
全くもって、理解できないんですけど・・・・・・・。
もうちょっとわかりやすくしていただけると助かります。
って、馬鹿がわかりやすい解説って、わかってる人にはかなり難しいんだと思いますけど。
すみません。わがまま言って。

148 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 23:28:20 ]
外側から攻めていって、カッコがなくなるまでループするとか
function foo($text) {
$kekka = Array();
$match = '/^(.*?)\((.*)\)(.*)/';
while (preg_match($match, $text, $arr) > 0) {
array_push($kekka, $arr[1] . "()" . $arr[3]);
$text = $arr[2];
}
array_push($kekka, $text);
return $kekka;
}
$arr=foo('カッコ書き前(カッコ1(カッコ2(カッコ3)カッコ2後)カッコ1後)カッコ書き後');
print_r($arr);

149 名前:デフォルトの名無しさん [2009/07/05(日) 12:38:53 ]
ありがとうございます。
完璧です。
ほんとにありがとうございました。!!



150 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 12:56:11 ]
なるほど、賢いなぁ

151 名前:デフォルトの名無しさん mailto:sage [2009/07/05(日) 14:24:31 ]
147は138かな?

もうちょっと努力して説明してみるから少し待ってね。







[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<175KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef