"
にエスケープするHTMLタグ(すでに検証済み)以外の二重引用符を識別できる正規表現は何ですか?PHP:エスケープ引用符のみHTMLタグ外(正規表現)
答えて
これは機能しますか?
\"(?!\s*\w*>)
このような正規表現はありません。
<p>
<!-- <a href=" --> is this outside " a tag <!-- "> foo </a> --> or not?
</p>
残念ながら、HTMLパーサーを使用する必要があります。すでにHTMLを検証しているので、おそらく既にパーサーを使用しているはずです。
今、今、私はそれのための表現が存在すると確信しています。 P – brianreavis
@brianreavis:私はあなたが冗談だと気づいていますが、実際には:http:// en.wikipedia.org/wiki/Regular_language ...実際には不可能で、数学的に証明できる。 – derobert
正規表現を使用しないでください。パーサーを使用(または書き込む)してください。
次のコードは、入力HTML文字列が(あなたが述べたように)整形式であることを前提としています。無効な入力に遭遇すると、コードが壊れることに注意してください!
整形式がわからない場合は、PHP Tidyを試してみてください。
<?php
$html = '<tag>text "text"<tag attr="value"><!-- "text" --> text</tag> "text".';
echo html_escape_quotes($html);
/* Parses input HTML and escapes any literal double quotes
in the text content with ". Leaves comments alone. */
function html_escape_quotes($html)
{
$output = "";
$length = strlen($html);
$delim = "<";
$offset = 0;
while ($offset < $length) {
$tokpos = strpos($html, $delim, $offset);
if ($tokpos === false) $tokpos = $length;
$token = substr($html, $offset, $tokpos - $offset);
$offset = $tokpos;
if ($delim == "<") {
$token = str_replace('"', '"', $token);
$delim = substr($html, $offset, 4) == "<!--" ? "-->" : ">";
} else {
$delim = "<";
}
$output .= $token;
}
return $output;
}
?>
可能です。
正規表現を使って、以下のようなことができるかもしれません。あなたはより良いアプローチは、機能の交換を行うためにコールバックを利用することであろう、
Serach: (\<.+?\>.+?)(")(.+?\</.+?\>)
Replace: $1'$3
。この正規表現は、タグの間」で「唯一の1を置き換えとして、カントー、それを複数回実行する必要がありますが。ただ、コンテンツを送信REを作成しますのタグを関数に渡すことができます。
詳細情報hereを参照してください。コールバックを検索します。 derobertが指摘したように、あなたがその前にコメントを削除する必要があるかもしれません:)
コメントを削除しても(どのようにパーサを使っていると思いますが)、あなたはすべての種類のものを残しています。例えば、引用符で囲まれた文字列を使って楽しい文字を入力することができます。< and >は引用符で囲んだ文字列の中で有効で、さらには
あなたは文字列を分割し、この式とテキストデータからタグを分離するために試みることができる:
<(?:\?[^?]+\?>|[A-Za-z]+(?:[^">]+|"[^"]*")*|!(?:\[CDATA\[(?:[^\]]+|](?:[^\]]|][^>]))*]]|--(?:[^-]+|-(?!->))*--))>
これは、(うまくいけば)なります任意のXML PI、要素タグ、CDATAおよびコメントブロックに一致します。
ので:
$parts = preg_split('/(<(?:\?[^?]+\?>|[A-Za-z]+(?:[^">]+|"[^"]*")*|!(?:\[CDATA\[(?:[^\]]+|](?:[^\]]|][^>]))*]]|--(?:[^-]+|-(?!->))*--))>)/', $str, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
$str = '';
foreach ($parts as $part) {
if ($part[0] == '<') {
$str .= $part;
} else {
$str .= str_replace('"', '"', $part);
}
}
しかし、私は、これは非常に効率的であることを疑います。実際のパーサーは、より効率的で正しいでしょう。
ない私にとっては最高の(すべてではない状況で動作します)が、十分:
function quoting(&$data) {
$quot = '(["\x93\x94\x84]|\“|\„|\”|\“|\„|\”|\&quo;|\")';
$parse = '<q>$2</q>';
$data = preg_replace('/="([^"]*)"/', '*%Q:$1%*', $data);
$data = preg_replace("/$quot(.*?)$quot/", $parse, $data);
$data = preg_replace('/\*%Q:(.*?)%\*/', '="$1"', $data);
}
- 1. 正規表現:引用符
- 2. PHP正規表現ヘルプ - マッチ何か=「何か\ 'sの」エスケープ単一引用符
- 3. PHP正規表現はエスケープされていない二重引用符
- 4. 正規表現の引用符
- 5. 引用符付きの正規表現
- 6. 正規表現は引用符
- 7. HTMLタグ付き正規表現とエスケープ文字が
- 8. 正規表現が引用符で囲まれていないかエスケープされた引用符
- 9. エスケープ文字を含む引用符付き文字列と一致する正規表現引用符
- 10. PHP正規表現のHTML
- 11. (正規表現?)引用符の周りにタグを追加しようとし
- 12. 正規表現単一引用符または二重引用符-C#
- 13. 正規表現C#のhtmlタグに
- 14. MySQLのhtmlタグ外のテキストの正規表現の照合
- 15. mongodb内の一重引用符の正規表現
- 16. 引用符内のかっこの正規表現
- 17. マルチパートの引用符付きファイル名の正規表現
- 18. 引用符間のPython正規表現のマッチングテキスト
- 19. エスケープ正規表現改行
- 20. 正規表現エスケープ文字
- 21. SPARQL正規表現の引用符やダッシュ
- 22. C#正規表現の一致三重引用符 "" "
- 23. 正規表現は、私のJavaScriptファイルには、単一引用符
- 24. 二重引用符で囲まれたゲットフレーズの正規表現
- 25. 正規表現リテラル文字列と引用符のマッチング
- 26. python正規表現引用符間の抽出
- 27. 正規表現コントロールの二重引用符
- 28. asp.net MVCの正規表現を二重引用符
- 29. 正規表現内の角括弧、引用符、またはスペース
- 30. 引用符の間に一致する正規表現/
最も確かではありません。あなたは実際の事例を試しましたか? – Tomalak