- PR -

正規表現で、、、

1
投稿者投稿内容
タマ
ベテラン
会議室デビュー日: 2004/08/08
投稿数: 56
投稿日時: 2004-08-09 00:47
正規表現についてご教授していただきたいのですが、

P(AAA1)Z(AAA2)
P(BBB1)Z(BBB2)
P(DDD1)Z(DDD2)

以上のような文字列に対して
P()のカッコ内の文字
Z()のカッコ内の文字
をとりたいのですが

正規表現のみで できるのでしょうか。
またできるとすればどのようにすればよいのでしょうか。
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2004-08-09 01:02
引用:

P(AAA1)Z(AAA2)
P(BBB1)Z(BBB2)
P(DDD1)Z(DDD2)

以上のような文字列に対して
P()のカッコ内の文字
Z()のカッコ内の文字
をとりたいのですが


1行ずつマッチングしていくってことでよいですか?まぁぜんぶ丸飲みでも良いんですけど、一応1行ずつ読んでいくっていう前提で書きます。

P\((.*?)\)Z\((.*?)\)

これでカッコ内の文字が取れます。もっと効率のよい書き方もできますがとりあえずこれがシンプルでしょう。Perl5の拡張正規表現がサポートされているエンジンなら。(Javaや.NET Frameworkの正規表現ライブラリなら大丈夫)

Javaのコードに書くときは"\"をダブルにするのを忘れないでくださいね。
タマ
ベテラン
会議室デビュー日: 2004/08/08
投稿数: 56
投稿日時: 2004-08-09 09:02
佐々木さん解答有難うございます。

>1行ずつマッチングしていくってことでよいですか?
よいです。

Pattern pattern = Pattern.compile("P\\((.*?)\\)Z\\((.*?)\\)");

こんな感じでいいのでしょうか?
このあと正規表現にマッチした文字を取得するにはどうしたらいいんでしょう?

String[] strs = pattern.split("P(AAA1)Z(AAA2)");

でいいんでしょうか??

(perl で$1 などで取得するのをJAVAではどのようにすればよいのでしょうか??)
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2004-08-09 09:33
>JAVAではどのように
java split(
で検索します。思い浮かんだソースの断片で検索
似たものが出てきます。

while (matcher.find()) {
http://www.hellohiro.com/regex.htm
タマ
ベテラン
会議室デビュー日: 2004/08/08
投稿数: 56
投稿日時: 2004-08-09 19:02
@やAをやってみたのですが P(ここの値)Z(ここの値) がとれません。。。
どなたかご教授してくださらないでしょうか。。。

@
------------------------------------------------------------------
Pattern pattern = Pattern.compile("P\\((.*?)\\)Z\\((.*?)\\)");
String[] strs = pattern.split("P(AAA1)Z(AAA2)");
System.out.println(strs[0]);
------------------------------------------------------------------
A
------------------------------------------------------------------
Pattern pattern = Pattern.compile("P\\((.*?)\\)Z\\((.*?)\\)");
Matcher matcher = pattern.matcher("P(AAA1)Z(AAA2)");
while (matcher.find()) {
System.out.println(matcher.group());
}
------------------------------------------------------------------
佐々木
大ベテラン
会議室デビュー日: 2003/03/30
投稿数: 121
投稿日時: 2004-08-09 19:27
こんなんでどうでしょ。

コード:

Pattern pattern = Pattern.compile("P\\((.*?)\\)Z\\((.*?)\\)");
Matcher m = pattern.matcher("P(AAA1)Z(AAA2)");
if (m.matches()){
System.out.println("$1=" + m.group(1));
System.out.println("$2=" + m.group(2));
}



[ メッセージ編集済み 編集者: 佐々木 編集日時 2004-08-09 19:30 ]
タマ
ベテラン
会議室デビュー日: 2004/08/08
投稿数: 56
投稿日時: 2004-08-09 21:21
佐々木さんありがとうございました。

完璧でした!!

ホントに助かりました。ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)