2

したがって、正規表現の主題に関して、ここには多くの質問と回答があります。欠点は、回答の大部分が単に正規表現であるということです...

私もグーグルで検索しました-そして何百ものサイトを見つけました。答えをすばやく理解して実装するためにすべてをくぐり抜けようとするのは簡単ではありません。それらは異なる言語のいずれかです-おそらく違いはありませんが、C#からVBへのエスケープは異なり、エスケープ文字と正規表現スイッチの違いについて混乱が生じます。

私が苦労しているのは、それらを理解して、明らかに単純な表現を実装できるようにすることです。

私のシナリオ:

指定された文字列のすべての文字をチェックする必要があります。正規表現で文字が許可されていない場合は、falseが返されます。

例:

私は次の表現を試しました(ここでさまざまな回答からコピー/貼り付け...)

Dim r As New Regex("^[a-zA-Z0-9 ]*$")

また試した

Dim r As New Regex("[a-zA-Z0-9\s]")

また試した

Dim r as New Regex("^[A-Za-z0-9 ]*")

私はこれを次のように実装しています:

Dim r As New Regex(_fontJIAdieuxRegEx) '' where _fontJIAdieuxRegEx is one of the above regex strings.
Dim supported = r.IsMatch(fontName)

私は次のようなものを検証しようとしています:

darren戻る必要がありますTrue

da-rrenハイフンFalseのために戻る必要があります-

da rren戻る必要がありますTrue

簡単に言えば、これらの式はTrueすべて、すべての文字列またはFalseすべての文字列に対して返されます。だから私は明らかに何か間違ったことをしている。

私が本当に感謝しているのは、私がどこで間違っているのかを指摘し、正規表現の構成について少し説明してくれる人です。

それらをもう少し理解したら、!などの他の文字を許可するためにさまざまな表現を使用できるようにする必要があります。@ "'など。したがって、上記の簡単な例を解くために式を貼り付けるだけではいけません。

4

3 に答える 3

6

最初のパターンは、使用する正しいパターンです。文字列内の1文字だけが一致する場合、2番目のパターンはtrueを返します。3番目のパターンは、文字列の先頭の0個以上の文字が一致する場合にtrueを返しますが、これは常に一致します。

それを機能させないためにあなたが何をしたかはわかりませんが、このように使用すると機能します:

Dim _fontJIAdieuxRegEx As String = "^[a-zA-Z0-9 ]*$"

Dim r As New Regex(_fontJIAdieuxRegEx)

Console.WriteLine(r.IsMatch("darren"))
Console.WriteLine(r.IsMatch("da-rren"))
Console.WriteLine(r.IsMatch("da rren"))

出力:

True
False
True
于 2012-12-11T21:00:18.130 に答える
3

正規表現クラスは名前空間にありますSystem.Text.RegularExpressions。それらを利用できるようにするSystem.Text.RegularExpressionsには、ソースコードの先頭にインポートを配置します。

Regex.IsMatch("subject", "regex") 

正規表現がサブジェクト文字列と一致するかどうかを確認します。

Regex.Replace("subject", "regex", "replacement") 

検索と置換を実行します。

Regex.Split("subject", "regex") 

上記のように、サブジェクト文字列を文字列の配列に分割します。これらのメソッドはすべてRegexOptions、コンストラクターなど、タイプのオプションの追加パラメーターを受け入れます。

ソース/詳細情報: http: //www.regular-expressions.info/dotnet.html

于 2012-12-11T20:53:17.893 に答える
2

2番目の式はにでも一致します。文字クラスの*最後にある文字は、正規表現エンジンにその文字クラスに0回以上一致するように指示します。式には他の条件がないため、どの文字列も有効です。3番目の式は、少なくとも1つの有効な文字を持つものすべてに一致します。

最初の式は機能するはずですが、必要がなければ、私は開始アンカーと終了アンカー(^および$)のファンではありません。代わりにここで行うのは、式を反転することです...無効な文字を探します。式は次のようになります。

[^ A-Za-z0-9]

この場合、^文字クラスの一部として使用される文字は、クラスを否定することを意味します。これは、そのクラスにないすべての文字と一致します。アンカーがないため、そのような文字が文字列。もちろん、VB.Netコードの結果も反転する必要があります。

Dim r As New Regex("[^A-Za-z0-9 ]")
Dim supported = Not r.IsMatch(fontName)
于 2012-12-11T21:05:26.447 に答える