以下のパターンに従うテキストを検証しようとしています。
- 先頭に「point(」というテキストが必要です
- 小数点以下 5 桁までの緯度の数値が続く必要があります (例: 42.12345)
- 後にコンマ「,」を付ける必要があります
- 小数点以下 5 桁までの経度の数値が続く必要があります (例: -81.12345)
- その後に閉じ括弧 ")" を付ける必要があります
マッチング例:
- ポイント(42.12345,-81.12345)
どんな助けでも大歓迎です。
ありがとう。
ここで少し分割して、正規表現を簡単に作成できます。
point(最初に一致させるには、-を使用します^point\([-]?\d+(?:\.\d+)?)また、最後に一致させるには、を使用します\)$。について[-]?\d+(?:\.\d+)?は、ここに説明があります:-
[-]? -開始時のオプションのnegative (-)記号に一致します(? quantifier終了時は0または1を意味します)\d+ -1つ以上の数字に一致します(?:\.\d+)? -オプションdecimalのに一致し、その後に。が続きone or more
digitsます。dot(。)は正規表現の特殊メタ文字であるため、一致させる場合はエスケープする必要があります。また、桁数をに制限するには、最小1桁と最大5桁に一致するの代わりに5-を使用できます。\d{1,5}\d+
^(caret)$(dollar)アンカーは文字列の最初と最後に一致します。
だから、ここにあなたの正規表現があります:-
^point\([-]?\d+(?:\.\d{1,5})?,[-]?\d+(?:\.\d{1,5})?\)$
これを試して:
^point\(\-?\d+\.\d{1,5},\-?\d+\.\d{1,5}\)$
^point\(\-?\d+\.\d{1,5},\-?\d+\.\d{1,5}\)$緯度と経度のロジックは、このようにさらに分割できます。
\-?=負の符号が存在する場合は一致します(正規表現では特別な意味が\あるため、でエスケープする必要があります)-\d+= 1つ以上の10進文字に一致します(つまり0、から9)\.=ピリオドに一致します(.単独では特別な意味があり、エスケープする必要があります)\d{1,5}= 10進数の1〜5文字に一致このようなもの:
point\((?<lat>-?\d+\.\d{1,5}),(?<long>-?\d+\.\d{1,5})\)
expressoなどの正規表現ツールを使用してみてください:http ://www.ultrapico.com/Expresso.htm
どうですか:
^point\((\-?\d+(\.\d+)?),\s*(\-?\d+(\.\d+)?)\)$