- ベストアンサー
正規表現
正規表現で次の文字列を認識する方法を教えてください 1. (000) (999) ()でくくられている3桁の数字。カッコを含みます 3桁の数字文字列だけなら'[0-9][0-9][0-9]' ?? 2. [あああ] (あああ) いあああ+ rあああ> 文字列'あああ'の前後の任意の文字、半角、全角両方OKを含む5文字 文字列がカッコの場合もあり
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
正規表現はソフトによって微妙に違うんで、なんのソフトか指定されないと難しいんですが。 1.カッコの表しかたがソフトによって違いますが、一般的には、 \(\d\d\d\) とかかな 2.日本語対応のソフトなら .あああ.
その他の回答 (1)
- himajin100000
- ベストアンサー率54% (1660/3060)
'過去のアンケート(Q3275317)の回答内容からするとSE・PGみたいなので細かい説明なし。 '(言語:VB.NET) Module Module1 Sub Main() Dim regex As System.Text.RegularExpressions.Regex Dim m As System.Text.RegularExpressions.Match 'メタ文字である()で括った数字3桁は '他の言語では$1として格納されていると思う。(たぶん後方参照) 'その後ろの\(はエスケープされた普通の文字列"("や")" '厳密に(333)だけをOKにしたい場合行頭と行末を正規表現中に含める regex = New System.Text.RegularExpressions.Regex("\(([0-9][0-9][0-9])\)") 'regex = New System.Text.RegularExpressions.Regex("\(([0-9]{3,3})\)")でも多分OK m = regex.Match("(333)(444)(555)") While m.Success Dim StrR As String StrR = m.Groups(1).ToString Console.WriteLine(StrR) m = m.NextMatch() End While 'コンソールの表示内容がわかるようブレークポイントを張っている '333 '444 '555 Dim regex2 As System.Text.RegularExpressions.Regex Dim m2 As System.Text.RegularExpressions.Match regex2 = New System.Text.RegularExpressions.Regex(".あああ.") m2 = regex2.Match("ええあああう(あああ)えああああけあああ+") While m2.Success Dim StrR As String StrR = m2.Value Console.WriteLine(StrR) m2 = m2.NextMatch() End While 'コンソールの表示内容がわかるようブレークポイントを張っている 'えあああう ')ああああ 'けあああ+ End Sub End Module '蛇足。 'ただ、このコードには大きな欠点があります。 '過去このような質問に回答しました。 'http://okwave.jp/qa3171372.html 'しかし実際に検証してみると '=====ああああ=====いいいい===== 'から検出されたのは, '=====ああああ===== 'のみで,重複している部分である '=====いいいい===== 'にはマッチしませんでした。 'これを受けて,直後に私は新規質問を立てたのですが, '運営に削除されました。 '当初確かsakusakerさんだったと思うのですが(yambejpさんだったかもしれないが), '「先読み」を教えてくれ、これによって一時的に対処が出来る、 'と私は判断しました。 'http://www4.ocn.ne.jp/~kaerume/k2e/regex_3.html 'ただし,この「先読み」部分は,マッチ対象に含まれないため '上記の例で言うと '(?======).+?===== 'でヒットするのは 'ああああ===== 'いいいい===== 'の二件になってしまいます '正規表現は結構難しいのかもしれません。
お礼
プログラムだったら関数を使っていくらでもできるんですけどね。 正規表現だけでのやり方が説明見ても括弧はどうしよう? と迷いました
お礼
ありがとうございます。 簡単でしたね