質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

1回答

224閲覧

正規表現 繰り返し項目を含む文字列からの抽出

grarare

総合スコア7

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

1クリップ

投稿2018/04/12 09:14

以下の文字列からA要素とC要素の内容を正規表現を使って抽出したいです。
C要素数は0~Nです。

//////////////////////////
<A>xxx</A>
<B>
<C>xxx</C>
<C>xxx</C>


<C>xxx</C>
</B>
//////////////////////////

現在は

  1. (a)でA要素の内容とB要素の内容を取得し、
  2. 1で取得したB要素の内容を使って(b)で複数のC要素の内容を取得

と2回に分けて処理しています。
これを1回で取得する正規表現文はありますでしょうか。

(a) <A>(.+?)</A>\s<B>(.*?)</B>
(b) <C>(.+?)</C>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KojiDoi

2018/04/12 10:49

言語は何ですか?
grarare

2018/04/12 11:05

C# または PHP です
guest

回答1

0

ベストアンサー

1回の正規表現

二回の正規表現で必要十分に思えますが、一回の正規表現に拘る理由は何ですか。
パフォーマンス的には二回の方が良さそうですが、バックトラック分は気になります。

(2018/04/12 22:58追記)
PHPには preg_match_all がありましたね(この関数の処理速度には詳しくない為、上記一文は取り下げます)。

XPath

正規表現でなければ、なりませんか。
PHPはDOMを使えるので、XPathを使えば、楽に制御できます。

Re: grarare さん

投稿2018/04/12 13:47

編集2018/04/12 13:58
think49

総合スコア18164

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

grarare

2018/04/12 14:17

回答ありがとうございます。 後出しですみません。文字列は実際にはDOMでアクセスできるようなものではありません。 説明の都合上、わかりやすくするためにこのような例文文字列を使わせていただきました。 ごめんなさい。 >一回の正規表現に拘る理由は何ですか 特に拘っているわけではなく、もし自分の知らない手法があるなら知りたかったのです。 今行っている処理をよりスマートに書けないかと思い質問させていただきました。
think49

2018/04/12 14:27 編集

> 文字列は実際にはDOMでアクセスできるようなものではありません。 どういうことでしょうか。 文字列はXML書式ではないのですか。 現在の書式に合う文字列を質問文に追記して下さい。 > 今行っている処理をよりスマートに書けないかと思い質問させていただきました。 正規表現の対案も示したつもりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問