8

文字クラス内でアンカーを使用することは可能ですか? これは機能しません:

analyze-string('abcd', '[\s^]abcd[\s$]') 

^文字クラス内では、リテラルのように見え$、リテラルとして扱われます。ただし、それらをエスケープ ( \^, \$) しても機能しません。

この式を使用して単語の境界を作成しようとしています ( \bXSLT/XQuery では使用できません) が、グループ ( (^|\s)) を使用しないことをお勧めします。非キャプチャ グループは使用できないため、シナリオによっては不要なキャプチャ グループが大量に発生する可能性があり、不要なキャプチャ グループのセットで「実際の」キャプチャ グループを見つけるという新しいタスクが作成されます。

4

3 に答える 3

6

答えはノーだと思います。 ^and$をアンカーとして a[]に含めることはできず、リテラル文字としてのみ含めることができます。(以前もそうしてほしいと思っていました。)

ただし、文字列の前後にスペースを連結してから、\s単語の境界を探すだけで、アンカーを気にする必要はありません。例えば

analyze-string(concat(' ', 'abcd xyz abcd', ' '), '\sabcd\s')

+after eachも必要な場合がありますが\s、それは別の問題です。

于 2013-05-30T01:24:33.850 に答える
0

最初の角括弧の後にキャレットを使用すると、文字クラスが無効になります。つまり、文字クラスは、文字クラスにない任意の文字と一致します。否定文字クラスは、(見えない) 改行文字にも一致します。

おそらく、否定的な先読みを試すことができます。

(?!\s)
于 2013-05-29T23:29:27.120 に答える