2017-05-22 2 views
-1

正規表現を使用してxpath文字列から要素の定義を検索しようとしています。 しかし、要素定義にはスラッシュセパレータ自体が含まれています。 XPathののスラッシュで区切られたスラッシュでテキストを抽出する正規表現

サンプル:

/primary[@classCode='ABC']/subject[@typeCode='123/a'][organizer/code[@codeSystem='12.35.1.1/b ']] /成分[@型コード=' RET '] /テキスト()

Iは結果を期待:classCode = @プライマリ

  1. [' ABC ']
  2. 被写体[@typeCodeを= '123/a'] [オーガナイザ/コード[@codeSystem = '12 .35.1.1/B ']]
  3. 成分[@タイプコード=' RET ']
  4. テキスト()

(のような、シンプルな何かをしようとすると? < = /)

または類似のバリエーションは適切ではない。

文字列をさらに処理せずにこれを分割する正規表現がありますか?

+0

どの正規表現エンジンを使用していますか?これは重要です。なぜなら、エンジン間で機能が大きく異なり、データには、再帰/平衡括弧を処理できる正規表現が必要であることが示されているからです。多くはできません。 –

+0

私はすべての式をサポートしていないSAP Sqlanywhere 16で正規表現エンジンを使用しています(例: "*?")。 –

答えて

0

は、言語に応じて正規表現を使用するよりもXPathを抽出するためのより良い方法がありますが、しかし、あなたはまだ使用正規表現を持っている場合、あなたはこれを試みることができる:

(?<=\/|^)(.*?(?:\[.*?\])*)(?=\/|$) 
  • 後方参照(?<=/を含みまたは開始アンカー^
  • (.*?(?:\[.*?\])*)は、パス内の各セグメントを抽出するために使用されます。
    • (?:\[.*?\])は、XPathセグメントは、あなたの例でsubject[][]として複数の引数を含むことができるので、上記の基と[]
    • 使用さ数量詞*内に存在するものと一致するように、非捕捉基です。
  • 先読み(?=\/|$)/または終了アンカー$

Regex101 Demo

// Output: 
primary[@classCode='ABC'] 
subject[@typeCode='123/a'][organizer/code[@codeSystem='12.35.1.1/b']] 
component[@typeCode='RET'] 
text() 
+0

ありがとうございました。このトピックに関する私の他の情報は、以前のSahil Gulatiの答え –

0

が含まれて私はケースに使用されているものを知らないが、私は、これはあなたを助けることを願っています。..

Regex demo

正規表現:\/.*?[\]\)](?=\/|$)

\/.*?[\]\)]これはすべて]又は)

(?=\/|$) POSIの最初の発生まで、次に/にマッチします先読みする/または$(文字列の最後)

+0

に感謝の意を表します。私はそれをSAP SQL Anywhere 16で使用する予定でしたが、 "。*?" regexp_substr関数ではサポートされていません。 –

+0

この問題のために働く1つの解決方法は、論理を反転させることです(角括弧を#で置き換えてテキストを分割する)。 –

関連する問題