1

タグの複数のインスタンスを含む可能性のある大きな文字列から、'<a href="..."> something.jpg</a>'タグから情報を再帰的に抽出する必要があります。Oracle11gで正規表現を使用してこれを行う必要があります。

私が探しているものの例は次のとおりです。

文字列の例:

文字列には常に<a>タグのインスタンスが少なくとも1つ含まれ、含めることができる数に上限はありません
。hrefは常にxidになります-[[:digit:]]
タグの属性は異なる場合があります

<p>text about something important</p><p><a href="@X@EmbeddedFile.requestUrlStub@X@bbcswebdav/xid-1234_1" target="_blank">file.pdf</a> </p><p><a href="@X@EmbeddedFile.requestUrlStub@X@bbcswebdav/xid-1235_1" target="_blank">anotherfile.pptx</a> </p><p><a href="@X@EmbeddedFile.requestUrlStub@X@bbcswebdav/xid-1236_1" target="_blank">yetanotherfile.pdf</a> </p>

ここで、その文字列を使用して、
REGEXP_SUBSTR(<string>、'<pattern>'、<start>、<occurrence>)を使用し、オカレンス値を調整して、3つの<a ...> ...</a>ブロックを抽出します。 3つのインスタンスを取得します。

私がこれまでに持っているのは:

SELECT REGEXP_SUBSTR(main_data, ''<a[[:print:]]+href="[[:print:]]+xid-1234_1"[[:print:]]+>[[:print:]]+</a>'', 1, 1)
      FROM table

そしてそれから得られる結果は

<a href="@X@EmbeddedFile.requestUrlStub@X@bbcswebdav/xid-1234_1" target="_blank">file.pdf</a> </p><p><a href="@X@EmbeddedFile.requestUrlStub@X@bbcswebdav/xid-1235_1" target="_blank">anotherfile.pptx</a> </p><p><a href="@X@EmbeddedFile.requestUrlStub@X@bbcswebdav/xid-1236_1" target="_blank">yetanotherfile.pdf</a>

つまり、最初の<aから始めて、最後の</a>まで取得します。</a>の最初のインスタンスで停止する必要がある場合。次に、オカレンスを2に増やすと、2番目の<a></a>タグのセットを取得する必要があります。ただし、現在、オカレンスを2に設定すると、何も返されません。

どんな助けでもありがたいです。ありがとうございました

4

3 に答える 3

1

代わりに、OracleのさまざまなXML機能を使用することを検討しましたか?

たとえば、テキストをCLOBに配置し、xmltype()とextract()を使用して、XPathクエリを使用して要素を取得します(たとえば、この質問を参照してください)。

一般に、正規表現を使用してネストされたデータ構造を抽出しようとすると、不幸になります。

于 2012-12-18T03:45:50.613 に答える
0

@Jacques Chesterが指摘したように、XMLサポートを使用できれば、それほど苦痛はありません。

できない場合は、をに変更して、欲張りでない一致を実行してみて+ください+?

+?修飾子は、Oracle正規表現のPerlの影響を受ける拡張機能の一部です。

于 2012-12-18T04:17:57.383 に答える
0

はい、貪欲でない演算子?が解決策です。

SELECT REGEXP_SUBSTR(x,'<a href="(.*?)".*?>(.*?)</a>',1, 3, 'i', 0)
  FROM (SELECT '<p>text about something important</p><p><a href="@X@EmbeddedFile.requestUrlStub@X@bbcswebdav/xid-1234_1" target="_blank">file.pdf</a> </p><p><a href="@X@EmbeddedFile.requestUrlStub@X@bbcswebdav/xid-1235_1" target="_blank">anotherfile.pptx</a> </p><p><a href="@X@EmbeddedFile.requestUrlStub@X@bbcswebdav/xid-1236_1" target="_blank">yetanotherfile.pdf</a> </p>' as x FROM DUAL);

戻り値

<a href="@X@EmbeddedFile.requestUrlStub@X@bbcswebdav/xid-1236_1" target="_blank">yetanotherfile.pdf</a>

3または、を1または2に変更した場合は、他のタグ。

最後01に置き換えると、hrefの内容が表示されます。

@X@EmbeddedFile.requestUrlStub@X@bbcswebdav/xid-1236_1

に置き換えると2

yetanotherfile.pdf
于 2012-12-18T09:23:32.617 に答える