以下のパターンに従うテキストを検証しようとしています。
- 先頭に「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+)?)\)$