文字列がこの予測形式の場合:
value = "hello and good morning"
「(引用符)も'(一重引用符)である可能性があり、終了文字('または ")は開始文字と同じになります。引用符の間の文字列を一致させたい。
\bvalue\s*=\s*(["'])([^\1]*)\1
(2つの\は、=記号の近くにスペースを入れることを許可します)
最初の「キャプチャされたグループ」(最初の括弧のペア内)-開始引用符と一致する必要があります。これは、'または"のいずれかである必要があります-最初のグループでキャプチャされたものとは異なる任意の数の文字を許可することになっています。次に、グループにキャプチャされた文字(囲み引用符)を期待します。
(必要な文字列は、2番目のキャプチャグループでキャプチャする必要があります)。
ただし、これは機能しません。
これは行います:
\bvalue\s*=\s*(['"])([^"']*)["']
ただし、開始引用符と終了引用符(二重または単一)の両方が同じであることを確認したいと思います。
編集
目標は基本的に、クラス属性に特定のクラス名が含まれているアンカーの開始タグを取得することでした。私は、(')または( ")を含むクラス属性のまれな機会をカバーしたいと思いました。
ここでのすべてのアドバイスに従って、私はパターンを使用しました。
<\s*\ba\b[^<>]+\bclass\s*=\s*("|'|\\"|\\')(?:(?!\1).)*\s*classname\s*(?:(?!\1).)*\1[^>]*>
意味:
タグオープンサインを見つけてください。
スペースを許可します。単語
a
を見つけます。
非終了タグを許可します。
「class(任意のスペース)=(任意のスペース)」を検索
します。次のいずれかの開始引用符を取得します:("または'または\"または\')。
Alan Mooreの回答から:冒頭の引用符以外の文字を許可します。
クラス名を検索
開始引用符以外の文字を許可します。
オープニングと同じクロージングクォートを見つけます。
uncloseing-tag文字を許可します。
終了タグcharを見つけます。