たとえば、次の正規表現は、考えられるすべての有効な非軍事時間間隔を説明しようとします。次のように: "04-12:15"、"12:30-9"、"3:10-4:57"。
"<td class="text">2013-11-04</td>"
.
正規表現(正規表現の@MikeClarkへの別の同様の質問クレジットから):
regex = "(?<!\\d|-|:)((?:0?[1-9]|1[0-2])(?::[0-5][0-9])?-
(?:0?[1-9]|1[0-2])(?::[0-5][0-9])?)(?!\\d|-|:)"
正規表現の説明は次のとおりです。
(?<!\\d|-|:)
数字、ハイフン、またはコロンの否定先読み すべて
(?:0?[1-9]|1[0-2])
の有効な時間の
(?::[0-5][0-9])
アカウント 有効なすべての分のアカウント
(?!\\d|-|:)
数字、ハイフン、またはコロンの否定先読み
うまくいけば、残りは自明です。これは機能しますが、かなり冗長です。理論的には、これは次のように単純化できます。
EXP =とします。(?:0?[1-9]|1[0-2])(?:[0-5][0-9])?
"(?<!\\d|-|:)((?:0?[1-9]|1[0-2])(?::[0-5][0-9])?-EXP)(?!\\d|-|:)";
だから私の質問は:
(1) : 正規表現の一部を参照する方法はありますか? 後方参照は機能しません。これは、必要な式が一致するものではなく (キャプチャ グループであると仮定して)、式自体であるためです。式を String に格納して を使用できることは理解してformat()
いますが、正規表現だけでこれを行うことができるかどうかを確認しています。
(2) : 私が考えることができる唯一の他のことは、式のどの繰り返しにあるかを判断できることです。次のように:
与えられた:regex = "...(?:someExpression){2}"
の1 回目か 2回目の繰り返しかを判断する方法はありsomeExpression
ますか?
Java
またはに関する回答Perl
が私に最適です。
助けてくれてありがとう!