3

.NETには一致するが、Javaには一致しない正規表現があります。私はJavaのバージョンが正しいと考えているので、この機能を.NETでどのように複製できるのか疑問に思っています。

これはパターンです:

([12AB]?)[: ]*(Mo|Mn|M|Tu|We|Wd|W|Th|Fr|F|Sa|Su)(\w*)[: ]*(\w*)[: ]*(\w*)

これはテスト文字列です:

D1:AM

実例は次のとおりです:RegEx Fiddle

Javaをクリックして、Javaの結果を確認します。 Java正規表現の結果

そして、.NETをクリックした結果: .NET正規表現の結果

4

1 に答える 1

7

違いはありませんが、ここでも、Java の間違った名前のメソッドの犠牲者がまた 1 人いることを除けば、違いはありません.matches()。正規表現一致は、入力のどこでも発生する可能性があります。たとえば、入力の最初だけで一致させたい場合は、正規表現エンジンに明示的に伝える必要があります。

貼り付けた画像をもう一度見ると、Java の場合は .NET.find()の場合と同じように true が返されることがわかります。.Match()Java.find()は実際の正規表現マッチングを行い、.NET も同様.Match()です。

Java は、最初と最後の両方で正規表現を固定するため、ここでは misnaming のせいです.matches()(補足:.lookingAt()固定は最初だけです)。その動作を .NET で複製したい場合は、正規表現を固定します。

^([12AB]?)[: ]*(Mo|Mn|M|Tu|We|Wd|W|Th|Fr|F|Sa|Su)(\w*)[: ]*(\w*)[: ]*(\w*)$

(しかし、スクリーンショットを見ると、引用したものとは別のD1:AM正規表現を使用したようです。上記の正規表現とはどちらもD1:PM一致しません)

于 2013-01-11T16:23:41.970 に答える