4

私は正規表現にかなり慣れていません。正規表現を使用するほど、正規表現が好きになります。次の条件を満たす必要がある正規表現に取り組んでいます。

  1. 英字で始める必要があります
  2. 次の3文字のうち、少なくとも1文字はアルファ文字である必要があります。
  3. 最初の4文字以降は、自動的に一致します。

現在、次の正規表現があります。^[a-zA-Z](?=.*[a-zA-Z]).{1}.*$

私が直面している問題は、私の前向きな先読み(?=.*[a-zA-Z]).{1}が、英字に続く次の3文字に制限されていないことです。

ここでコンセプトが欠けているような気がします。この表現には何が欠けていますか?

皆さんありがとう。

4

4 に答える 4

3

あなたの.*先読みでそれをやっています。ここで範囲を制限する必要があります

^[a-zA-Z](?=.{0,2}[a-zA-Z]).{1}.*$

編集:文字列に少なくとも4文字あることを確認したい場合は、次のような別の先読みを使用できます。

 ^[a-zA-Z](?=.{3})(?=.{0,2}[a-zA-Z]).{1}.*$
于 2010-06-04T13:25:37.380 に答える
3

何を先読みしたいですか?使ってみませんか

^[a-zA-Z](..[a-zA-Z]|.[a-zA-Z].|[a-zA-Z]..)

そして幸せになる?

于 2010-06-04T13:26:41.013 に答える
1

おそらく回避策を実行する必要があります。何かのようなもの:

^[a-z](?=([a-z]..|.[a-z].|..[a-z])).{3}.*
  • 最初の文字[az]
  • 1番目、2番目、または3番目の文字のいずれかの正の先読みはazです([a-z]..|.[a-z].|..[a-z])
  • 他のもの
于 2010-06-04T13:17:35.767 に答える
0

*先読みをに変更し?て取得するm/^[a-zA-Z](?=.?[a-zA-Z]).{1}.*$

私があなたの基準を理解しているなら、それは貪欲の変化のためにそれを修正します。

これらは正しく一致しています:

a2a3-match
2aaa-no match
Aaaa-match
a333-no match
于 2010-06-04T13:34:36.640 に答える