1

長い文字列(HTMLソースコード)からデータを抽出するために、ルビー正規表現を書き込もうとしています。

以下の文字列から、4つの数字(1、11、30、90)と最初の一重引用符で囲まれた文字列(blablabla)を保持します

AjouterRDV(1, 11, 30, 90, 'blablabla', '123' ... (it goes on) );

私の正規表現は現在上記の例で機能しますが、文字列にエスケープされたアポストロフィが含まれていると失敗します。

AjouterRDV(1, 11, 30, 90, 'it\'s failing!', '123' ... (it goes on) );

これが2つの文字列の例(1つは合格、もう1つは失敗)の正規表現です-Rubular

4

3 に答える 3

3

より簡単な方法(キャプチャを過ぎたものと一致する必要がないと仮定します):

AjouterRDV\((\d+),(\d+),(\d+),(\d+),'(.+?)',

Rubularの例を参照してください

于 2012-11-30T12:01:58.283 に答える
2

あなたはこれを試すことができます:-

/AjouterRDV\( (\d+), (\d+), (\d+), (\d+), '((?:(?<=\\)[']|[^'])*)', .* \);$/ix

'((?:(?<=\\)[']|[^'])*)''の前に一致する\、または以外の任意の文字に一致する'

于 2012-11-30T11:45:44.857 に答える
1

うーん、誰かからのコメントがあったのですが、削除したようです。彼の提案は

AjouterRDV\( (\d+), (\d+), (\d+), (\d+), '((?<=\\)[']|[^'])*', .* \);$

これは、5番目のグループを正しくキャプチャしないという事実を除いて、ほとんど機能します。そのために必要なもの:

AjouterRDV\( (\d+), (\d+), (\d+), (\d+), '((?:(?<=\\)[']|[^'])*)', .* \);$

これは、彼の「外部」グループを非キャプチャグループに変換してから、選択範囲を一重引用符で囲んでキャプチャします。

于 2012-11-30T11:51:10.400 に答える