テキストに一重引用符が含まれていると、パターンが失敗します。
私はPerlでそれを解決しようとしていまし\\Q
た\\E
が、パターンのコンパイルに失敗しました。
例えば
パターン用"(?i)Name is\\b(\\w+)\\b"
テキストが"My name is Foampile X"
の場合、一致します。しかし、"My name is 'Foampile'"
私は一致しません。
テキストを含む一重引用符を他の文字と同じように見なすにはどうすればよいですか?
Foampile
(\b
は文字を消費しない) の前のスペースを無視するため、いずれにしても一致するのは奇妙だと思います。\w
は引用符に一致しないことに注意してください[a-zA-Z0-9_]
。したがって、引用符を含めるかどうかに応じて、次のいずれかを試すことができます。
"(?i)Name is\\W+(\\w+)"
or
"(?i)Name is\\W+?('?\\w+'?)"
引用符で囲まれているかどうかに関係なく、名前が正確に 1 つのスペースで区切られていることを主張したい場合は、次のように簡略化できます。
"(?i)Name is '?(\\w+)'?"
or
"(?i)Name is ('?\\w+'?)"
また、あなたの質問が引用符なしでテストしただけで、実際の目標は引用符で囲まれた名前のみを受け入れることである場合は、それらすべてを省略でき?
ます'
。
ただし、最初のバリアントは、名前を文の残りの部分から区切る単語以外の文字に関係なく機能します。
\w
文字クラスは任意の文字です。他の可能性を含めるには、正規表現を拡張する必要があります。
"Name is [\w']+"
これにより、文字や引用符を含む、展開可能な値のセットが正規表現に与えられます。ただし、正しく引用された名前を強制することは正確な一致ではありません。それは次のようになります。
"Name is ['"]?[\w']+['"]?"