2009-08-12 23 views
0

これを解決するのは難しいですが、正規表現がサポートしていることは間違いありません。私はちょうど正規表現の世界での概念の名前を思い出すことができません。正規表現の検索と置き換えが置換えの検索用語

特定のパターンの文字列を検索して置き換える必要がありますが、パターンが異なる可能性があり、置き換えられる文字は置き換えられる文字を「記憶」する必要があります。例えば

、私は任意の文字列持っていると言う:ので、結果は次のようになり 、134kshflskj9809hkj

を、私は括弧と数字を囲むようにしたい:数字を検索する(134)kshflskj(9809)がhkj

十分に単純ですが、それらを囲む方法は?

誰かがサンプルを提供したり、正しい方向に私を向けることができますか?

+3

あなたはどの言語で作業していますか?この概念は逆参照btwと呼ばれています:http://www.regular-expressions.info/brackets.html – gnarf

+0

C#しかし、意図的にその事実を残しました。私は "一般的な"正規表現でこれを行う方法として好奇心が強いです。逆参照メモリジョグありがとう。そのとおり。 –

+2

正規表現は言語に依存しません。 Perlと.NETの正規表現置換文字列の実装では、最初のグループは$ 1、次のグループは$ 2です。しかし、このスキームは、すべての実装の間では難しくなく速いルールではありません。 –

答えて

2

// C#: 
string result = Regex.Replace(input, @"(\d+)", "($1)"); 
// JavaScript: 
thestring.replace(/(\d+)/g, '($1)'); 
// Perl: 
s/(\d+)/($1)/g; 
// PHP: 
$result = preg_replace("/(\d+)/", '($1)', $input); 

括弧(\d+)周り具体的に「グループ」置換文字列にbackreferenced可能な第1の(そして唯一ここでは)グループ作ります。いくつかの実装では、1つの文字列内で複数回一致するようにするために、フラグgが必要です)。置換文字列はかなり類似していますが、一部の言語ではではなく\1が使用されますが、一部の言語では両方が許可されます。

0

言語によっては、グループに一致すると思われます。

だから、一般的に、あなたはその後、あなたは(あなたの言語に固有)で結果のグループを反復よ

([0-9]{1,})|([a-zA-Z]{1,}) 

の形でパターンを作ります。いくつかの様々なlangaugesで

1

ほとんどの正規表現置換関数を使用すると、置換文字列を定義するときに、正規表現(a.k.a.後方参照)で指定されたキャプチャグループを参照できます。例えば、PHPからpreg_replace()を使用して:\1「は正規表現の最初のキャプチャグループ」を意味

$var = "134kshflskj9809hkj"; 
$result = preg_replace('/(\d+)/', '(\1)', $var); 

// $result now equals "(134)kshflskj(9809)hkj" 

1

別やや一般的な解決策はこれです:

検索:/([\d]+)([^\d]*)/g
置き換える:($1)$2

([\d]+)を:1桁以上のセットと一致して
([^\d]*)グループでそれらを保持:セットと一致また、それらを保持することもできます。 \Dもここで動作します。
g:入力に対して複数回動作するグローバル表現であることを示します。

($1):置換ブロックでは、括弧は特別な意味を持たないので、括弧で囲んで最初のグループを出力します。
$2:第2グループを出力

私はpretty good online regex toolを使用して私の表現をテストしました。次のステップは、それぞれ独自の実装のニュアンスがあるため、使用している言語に適用することです。

1

数字を検索し、括弧で囲まれた正規表現で置き換える場合は、逆参照(グループ化)は必要ありません。置換文字列内の正規表現マッチ全体を使用する方が簡単です。 perlの

$text =~ s/\d+/($&)/g; 

ため

例えばこれは、1桁以上を検索し、すべての出現を見つけて交換するグラム末尾で、($ &で指定された)試合を囲む括弧に置き換えます。

正規表現言語の正しい構文については、http://www.regular-expressions.info/refreplace.htmlを参照してください。

関連する問題