問題タブ [character-class]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
regex - sed の [[:blank:]] 文字クラスの反対のマッチング
sed で文字クラスの逆を表す方法が見つかりません。これが perl ライクな環境である場合、[^\s] を使用します。ただし、sed では、これは非空白ではなく非 s に一致するように見えます。
テキスト行 (gdrive から) で、空白以外の最初のトークンをキャプチャし、行の最初の空白より後 (および空白を含む) をすべて無視する必要があります。
これは、私が解析しようとしている入力の偽の代表的な例です。
これを行う最初の試みは次の行でした:
最初は、これが最初の空白ではなく最初の「s」で途切れていることに気付くまで、うまくいくように見えました。
それ以来、次のようなさまざまな順列を試みました。
予想: 19845fake-FakeE-xbk534sWsbBQ
実際: 19845fake-FakeE-xbk534
java - Java Regex 交差 (&&) は可換ではありません
文字クラス交差演算子&&
は、その関数の定義により可換でなければなりません。a および b と[a&&b]
まったく同じ文字に一致する必要があります。[b&&a]
次のパターンはすべてこの基準を満たしていることがわかりました。
[a-z&&abcd]
と同じ[abcd&&a-z]
[a-z&&ab[cd]]
と同じ[ab[cd]&&a-z]
[a-z&&[ab][cd]]
と同じ[[ab][cd]&&a-z]
それらはすべて と同等[abcd]
です。ただし、 と表現する[a-z&&[ab]cd]
と、これは当てはまりません。その式は and のみに一致し、 c
andには一致しd
ません。ただし、反転バージョンは、他のパターンと同様に 4 つの文字すべてに一致します。言い換えるとa
b
[[ab]cd&&a-z]
[[ab]cd&&a-z]
と同じではない[a-z&&[ab]cd]
Pattern
これがなぜなのかを調べるために のソースを調べたところ、これが交差の実装方法であることがわかりました (Java 1.8.0_60 JDK)
マークされた行が
そしてそうではない
つまり、 の右側で&&
は、ネストされた文字クラス内にない最初の文字が検出されるたびに、パターン パーサーはその前に何もないと見なします。そのため、 の後&&
、パーサーは を読み取り[ab]
、rightNode
次に を読み取りますcd
が、 とマージする代わりに、[ab]
上書きするだけです。
のような正規表現を実際に書く人はいないことは知っています[a-z&&[ab]cd]
が、それでもドキュメントはそれが機能するはずであることを暗示しています。これは実装のバグですか、それとも実際にこのように動作するはずですか?