2017-09-13 15 views
0

.のドットと一致する正規表現を、次のドットのあとにある文字の後ろに置いてほしい.または行末。後ろに文字があるドットと一致する正規表現

たとえば、次のようになります。.foo.bar

.foo.123は、ドットの後に文字がない.123を含むため無効です。

は、これまでのところ私が持っている:

^([a-z0-9)]|\.(?=.*[a-z].*\.))+$ 

私は上記の問題点は肯定先読みで.ための最後の試合であることを理解し:それは常に一致させるために失敗します。私は「ドットが一致すれば、それ以外はラインの終わりに一致する」のようなものだと思う。最終的な試合の代わりに($|\.)を使用してもこれは動作しませんが、.が一致しても両方試行するので、私は仮定します。

私はルックバックを使用しないようにしたいと思います。私は文字列だけでなく、文字列全体を一致させたい。

+0

あなただけの '.'や行全体を言及したいと思いますか? –

+2

'.foo.123'では' '.foo.'の部分にドットがついていて、その後に" letters "が続き、別のドットが続くようにしてはいけませんか?明確にするためにいくつかの例/テストケースを挙げてください。 – Gurman

+1

個々のドットを一致させるか、完全な文字列をマッチングするかどうかを検証しますか? – trincot

答えて

1

この正規表現では、若干の変更が必要な場合があります。 ^(?:\.[^\.\s]*[a-zA-Z][^\.\s]*)+$

Regex101 demo。それがどのように動作するかの

内訳:

  • ^ - 新しいラインのスタート
  • (?:\.[^\.\s]*[a-zA-Z][^\.\s]*) - 次の期間、または新しい行の前に、すべてのテキストが続くグラブ期間。少なくとも1つの文字があることを確認してください。
    • \. - 期間を指定して開始します。
    • [^\.\s]* - 空白以外の任意の数または任意の回数の.
    • [a-zA-Z] - 期間ごとに少なくとも1文字を確認してください。
    • [^\.\s]* - 空白以外の任意の数または任意の回数の.
  • + - 1回以上
  • $ - ラインの終わり
+0

これは素晴らしい作品です。 「これは繰り返されたグループなので、文字が後に続く限り、開始時に期間がある可能性がある」ということを明確にすることができますか? – crossboy007

+0

と思われますか?マークは実際にはそれが必要だった以前の正規表現からのコピーエラーです。オプションの期間ではなく、期間と一致する必要があります。このミスは、「Letters.foo」のケースを破った。これがテストケースが重要な理由です。 –

+1

'? 'マークが削除され、より明確な説明で更新されました。 –

関連する問題