0

この質問に似ていますが、微妙な違いがあるため、まだ助けが必要です。

現在私は持っています:

'(.*)\[(\d+\-\d+)\]'

私の正規表現として、ダッシュで区切られた2つの小数点を含む角括弧[]が続く任意の数の文字に一致します。私の問題は、角括弧の間に 10 進数が 1 つだけ一致するようにしたいということです。そう:

word[1-5] = match
word[5] = match
word[] = match (not essential)

と確保

word[-5] = no match

誰かが次のステップの方向に私を向けることができますか. 私は現在、正規表現はちょっとした推測ゲームだと思っていますが、もっとうまくなりたいと思っています。

4

4 に答える 4

3

あなたのものに行き、最後の部分をオプションにします

(.*)\[(\d+(-\d+)?)\]

を使用して?います。

他のタスクを達成するには、まあ、?もう一度

(.*)\[(\d+(-\d+)?)?\]
                  ^here

実際の例http://rubular.com/r/t0MaHyHfeS

于 2012-10-26T16:30:45.490 に答える
1

?0 または 1 つの一致に一致するために使用します

したがって?-\d+と で区切られた両方の数字に使用します-

(.*)\[(\d+(-\d+)?)?\]

エスケープする必要はありません-..文字クラスの間にある場合にのみ特別な意味を持ちます。

于 2012-10-26T16:31:13.043 に答える
0

(.*)\[((\d+(?:\-\d+)?)?)\]

これは、数字が 0 であってもすべてに一致し、後方参照します (match[1-5]):

1- マッチ 2- 1-5

于 2012-10-26T16:32:51.653 に答える
0

すべての正規表現インタープリターがこれをサポートしているわけではありませんが、括弧内の部分に「または」演算子を試すことができます。

'(.*)\[(\d+\-\d+|\d+)\]'
于 2012-10-26T16:33:24.680 に答える