1

置換部分を置換文字列のサブ部分にしたい regexp_replace があります。以下の例では、/2 は常に最初の部分、つまり MON を与える必要があります。

SELECT REGEXP_REPLACE('Test MON 234','^(.*? )(MON|FRI|SAT|SUN).*$', '\1\2') FROM dual;
==> Test MON
SELECT REGEXP_REPLACE('QA FRI 111','^(.*? )(MON|FRI|SAT|SUN).*$', '\1\2') FROM dual;
should give ==>  QA MON
4

1 に答える 1

4

些細な答え:

SELECT REGEXP_REPLACE('Test MON 234','^(.*? )(MON|FRI|SAT|SUN).*$', '\1MON') FROM dual;
SELECT REGEXP_REPLACE('QA FRI 111','^(.*? )(MON|FRI|SAT|SUN).*$', '\1MON') FROM dual;

あまり自明ではない答え:正規表現から置換文字列の凍結部分を抽出します。

SELECT REGEXP_REPLACE('^(.*? )(MON|FRI|SAT|SUN).*$', '^[^(]*\([^(]*\(([^)|]+).*$', '\1') FROM dual;

このソリューションの前提に注意してください: - 2 番目のキャプチャ グループの最初の選択肢が正確に必要です。- ネストされたキャプチャ グループなし - エスケープされたキャプチャ グループ区切り文字なし

より複雑な場合 (実際、この使用例でも)、正規表現パターンから抽出するのではなく、それを決定するソースから凍結された置換を取得することを検討することをお勧めします。そうしないと、誰かにとってコード メンテナンスの悪夢が待っていることになります。

于 2013-04-04T12:24:13.907 に答える