2017-04-04 17 views
1

正規表現を<> @#のようないくつかの文字で制限したいのですが、キャラクター。これまでのところ私は成功していませんでした。正規表現で1つの出現を許可する

^([^<>@#]+[|]?)$ 

正規表現を1つだけに制限する方法を理解できません。 char。

+0

パイプは正確に1回発生する必要がありますか、まったく発生しないことがありますか? –

+0

これは1回だけ、または全く発生しないことがあります – alxbxbx

答えて

1

否定先読みを使用します。

^(?!(?:[^|]*\|){2})[^<>@#]+$ 

regex demo

詳細参照してください:

  • ^ - 文字列の先頭
  • (?!(?:[^|]*\|){2}) - そこにはできません2つの出現を以外の0以上の文字、次いで|
  • [^<>@#]+から<以外の1またはそれ以上の文字、>@#
  • $ - 文字列の末尾。
+1

ありがとうございました!これが解決策です。これを正解とマークします。 – alxbxbx

+0

この式は、制限条件( '^ [^ <> @#] + $'、ネゲートされた文字クラス以外の1つ以上の文字)を満たす文字列と一致します。文字列。したがって、 '|'、 'd'、' | d'、 'd |'はすべて[有効な一致]です(https://regex101.com/r/KSrVwj/2)。テストが複数行の文字列に対して実行されるため、デモに '\ n'を追加しました。 –

+0

ええ、これはまさに私が探していたものです。どうもありがとう! – alxbxbx

関連する問題