まで、すべてのものを抽出するために正規表現を使用した:私は次の文を持っている特定のシンボルをダブル発生
以下JSON
ように私に渡している
column1==1 && 'column2'=='value' || year == 2006 || ('column2'=='value1' && 'column2'!='value2')
:私はこのJSON
から抽出したい
{
"type": "ExpressionStatement",
"expression": {
"type": "LogicalExpression",
"operator": "||",
"left": {
"type": "LogicalExpression",
"operator": "||",
"left": {
"type": "LogicalExpression",
"operator": "&&",
"left": {
"type": "BinaryExpression",
"operator": "==",
"left": {
"type": "Identifier",
"name": "column1"
},
"right": {
"type": "Literal",
"value": 1,
"raw": "1"
}
},
"right": {
"type": "BinaryExpression",
"operator": "==",
"left": {
"type": "Literal",
"value": "column2",
"raw": "'column2'"
},
"right": {
"type": "Literal",
"value": "value",
"raw": "'value'"
}
}
},
"right": {
"type": "BinaryExpression",
"operator": "==",
"left": {
"type": "Identifier",
"name": "year"
},
"right": {
"type": "Literal",
"value": 2006,
"raw": "2006"
}
}
},
"right": {
"type": "LogicalExpression",
"operator": "&&",
"left": {
"type": "BinaryExpression",
"operator": "==",
"left": {
"type": "Literal",
"value": "column2",
"raw": "'column2'"
},
"right": {
"type": "Literal",
"value": "value1",
"raw": "'value1'"
}
},
"right": {
"type": "BinaryExpression",
"operator": "!=",
"left": {
"type": "Literal",
"value": "column2",
"raw": "'column2'"
},
"right": {
"type": "Literal",
"value": "value2",
"raw": "'value2'"
}
}
}
}
}
文字列は、バイナリ式のオペランドだけです。
"left": {
"type": "Identifier",
"name": "column1"
},
"right": {
"type": "Literal",
"value": 1,
"raw": "1"
}
私は列名と比較値を得ることができ、その文字列を持つ:たとえば、column1==1
のために私はJSON
文字列のこの部分のみを必要としています。 JSON
形式の文字列は一貫しているので、zero-width positive lookbehind assertionを使用して"type": "BinaryExpression",
の値を確認できます。その後、すべてのデータを2番目の}
に取得する必要があります。
}
の2番目の出現まですべてを得る正規表現を使用する方法はありますか?
注:
- 私はいくつかの
JSON
string
にパーサーを使用する方がよいでしょうけど、私は(私はSQL Serverのコンテキストで働いています)は許されないのです。 - SQL Server 2016にはネイティブなJSONサポートがありますが、一部のデータベースは以前のバージョンになっています。
- 私はT-SQLの文脈で純粋なregexソリューションが必要です。私はthis one for exampleのような.netを使用することはできません。
しかし、TSQLには正規表現をサポートしていません。 [SQL ServerでのRegExの使用](http://stackoverflow.com/questions/8928378/using-regex-in-sql-server)を参照してください。非常に限られた*ワイルドカード*パターンを使用することができます。私はquesitonのタグを付け直した。 –
@WiktorStribiżew私はいくつかのSQL CLR正規表現関数を実装しました。私はregex replace、regex matches、regex splitなどを持っています。詳細はhttps://msdn.microsoftをご覧ください。com/ja-us/library/ff878119.aspx – gotqn
[OK]を、しかしあなたは質問でそれを言及していない。私はregexタグを当てています。だから何を試しましたか? –