2017-06-22 7 views
1

目的:より大きい文字列内の固定長文字列の一般化された正規表現を作成します。この文字列には指定したパディング文字が続き、整数カウンタが増加します。理想的には、「このグループの長さを10にして、1つのタイプの文字とそれに続く別の文字が含まれていてほしい」という言い方があります。特定の長さの正規表現のパディング付き

私は(数字は文字が記号かもしれない可能性があることができ)、可変データの中にこれに一致するようにしようとしています: パディング文字+数字が指定された長さまで追加、ここでこれらは、5

だろう許可されたパディング+番号の組み合わせここで

$$$$1 
$$$12 
$$123 
$1234 

は一例です:

<variable-data> <padding-characters> <numbers> <variable-data> 
............... .................... ddddddddd ............... 
(where periods are any characters and 'd' is any digit) 

Example Data: 
ABC    $$$$     1   [email protected] 

Example Regex: 
ABC\$*\d+\[email protected] 

Match: 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

No Match: 
[email protected] 
[email protected] 
私が試した何

Regex101

:それはまだ次に一致するので、これは動作しません

ABC(?=.{5})\$*\d+\[email protected] 

数字がのため10。私が試したもう一つは、それが非数字または非$に遭遇した後に探して停止することを目指してい

ABC(?=[\$\d]{5}[^\$\d])(\$*\d+)\[email protected] 

だったが、文字列の次の部分は、$または数字で始めることができるので、それは便利ではありません。

(\$\$\$\$\d|\$\$\$\d\d|\$\$\d\d\d|\$\d\d\d\d|\d\d\d\d\d) 

しかし、私は、これはより一般化するためにしようとしていますし、例えばパディングの可変量があることができます:

最も簡単な正規表現は、この問題を解決するには

$$$$$$$$$1 
$$$$$$$$12 
... 
+0

* variable-data *が数字で始まらないことを意味しますか? – revo

+0

@revo のどれが実行時になるのかわかりません。それらはすべてユーザー定義です。彼らは確かに数字かもしれない。 –

+0

このような入力文字列* ABC $$$$ 11!@ *の可能性はありますか? – revo

答えて

2
ABC(?=.{5}\[email protected])\$*\d+\[email protected] 

これはあなたの最初の試みに非常によく似ていますが、先読みも終端文字列が含まれているわずかな違いを持ちます。これは、正規表現がそれ以上のものとマッチしないことを確かめるために、アンカーするものを与えます。

+0

ありがとう、私は次のトークンに依存しないものが欲しかった。これは私の元の質問に答えるようです。 –

関連する問題