0

控えめに言っても、私は正規表現の専門家ではありません。私が探しているのは、文字列から特定の形式の複数の値を抽出する正規表現です。

文字列の例:「[record:CityID]のCustomer [record:CustomerID]は[record:TypeID]タイプです」

必要なのは、「[record:XXXXX]」の形式のこの文字列内のすべての値を取得する式です。したがって、この例では、次のようになります。

["CustomerID"、 "CityID"、 "TypeID"]

できますか?

4

2 に答える 2

0

実際には、次のようなsedことがうまくいくかもしれません。

echo "Customer ..." | sed -e 's/\][^[]*\[record:/","/'g -e 's/^.*record:/["/' -e 's/].*$/"]/
于 2012-06-19T12:53:19.947 に答える
0

Javascript の場合:

var pattern = '\\[record:([a-zA-Z0-9]+)\\]';
var records = new RegExp(pattern, 'g');
var extract = new RegExp(pattern);

var string = "Customer [record:CustomerID] from [record:CityID] is of type [record:TypeID]"

var matches = string.match(records);
console.log(matches);
> [ '[record:CustomerID]',
    '[record:CityID]',
    '[record:TypeID]' ]

var records = [];
for (var i=0; i<matches.length; i++) {
    var match = matches[i].match(extract);
    records.push(match[1]);
}
console.log(records)
> [ 'CustomerID',
    'CityID',
    'TypeID' ]

おそらく最も簡潔な解決策ではありませんが、クリーンで (できれば) わかりやすいものです。

  • 特別に扱ってはならない角かっこは\、それらの前に配置することでエスケープされます
  • 抽出されるグループは でラップされ()、正規表現グループ/サブパターンを形成します
  • パターン[a-zA-Z0-9]+は「文字列 (大文字または小文字) または数字に一致する」ことを意味し、「+1 つ以上の長さ」を指定します。ここでの A*は、「長さ 0 以上」を意味します。

ここでは、同じパターンに基づく 2 つの正規表現を使用しています。それらはさまざまなオプションでコンパイルされます。gフラグは、文字列内のすべての一致を探すように正規表現に指示します。このフラグを使用すると、結果と一致したグループは取得されず、一致した文字列全体のみが取得されます。2 番目の正規表現はgフラグなしでコンパイルされるため、これを使用して一致したグループを抽出できます。

于 2012-06-19T12:45:31.060 に答える