1

たとえば、逆一致を達成するにはどうすればよいですか

 getAllTextMatches $ "foobar  bar    bl   a" =~ pattern :: [String]

複数の空白ではない文字列のリストを生成します。

私はもう試した

getAllTextMatches $ "foobar  bar    bl   a" =~ "(\\s\\s+)" :: [String]

期待どおりにこのリストを返します:[" "," "," "]

今、次の方法で式を否定しようとしました

getAllTextMatches $ "foobar  bar    bl   a" =~ "(?!\\s\\s+)" :: [String]

[""] 私はこれを受け取りたかったのですが、戻ってき ました:

["foobar", "bar", "bl", "a"]

または別の例として

getAllTextMatches $ "foobar /* bla */ bar bl a" =~ "/\\*[^*]*\\*/" :: [String] 

戻り値["/* bla */"]

受け取りたい:["foobar "," bar bl a"]否定することで"/\\*[^*]*\\*/"

4

1 に答える 1

1

あなたが探しているのは分割です:

オリジナルのパターンでストリングを分割すると、必要なものが得られます。

また

あなたはと一致させることができます:

(?>\\s\\s+\\K|^)(?>\\S|\\s(?!\\s+))++

(?>/\\*[^*]*\\*/\\K|^)(?>[^/]++|/(?!\\*[^*]*\\*/))++

\K、マッチの開始をリセットする pcre 機能です。

于 2013-08-18T21:56:52.267 に答える