1

文字列内の区切り文字がバックスラッシュでエスケープされているかどうかをチェックする正規表現を探しています。

私が懸念している区切り文字は、コンマ(\、)、コロン(\ :)、セミコロン(\;)であり、もちろん、円記号自体はエスケープする必要があります(\)。

たとえば、文字列 "test"には区切り文字がなく、エスケープする必要がないため、一致を返す必要があります。文字列"te\; st"は、セミコロン区切り文字がエスケープされているため、一致を返します。「te;st」と「t\;s:t」はどちらも、エスケープされていない区切り文字が少なくとも1つ含まれているため、失敗します。

私は条件付きで前向きな見方が必要であることを知っています、そしてこれは私がこれまでに持っているものです、しかしそれは私に期待された答えを与えていません。

^(?<delimiter>[:;,\\])?(?(delimiter)\(?<=(?:\\\\)*\\)k<delimiter>|.)$

これを機能させる方法について何か提案はありますか?

ありがとう。

4

1 に答える 1

6
^(?:[^,:;\\]|\\.)*$

^           # beginning of string
(?:  )*     # 0 or more of:
  [^,:;\\]  #  a normal (non-delimiter) character
|           # or:
  \\.       #  an escaped character (backslash + any)
$           # end of string

つまり、文字列のすべての部分をエスケープするか、区切り文字以外の文字にする必要があります。

于 2012-12-02T05:06:05.203 に答える