【问题标题】:Replace characters that are enclosed with quotes using a regular expression使用正则表达式替换用引号括起来的字符
【发布时间】:2010-03-11 11:50:58
【问题描述】:

如何用preg_replace 替换用引号括起来的字符?

我需要替换 href="" 中的所有特殊字符。示例:

<a href="ööbik">ööbik</a> should become <a href="oobik">ööbik</a>

【问题讨论】:

  • 对我的解决方案有帮助吗?

标签: php regex preg-replace


【解决方案1】:

要替换“特殊字符”,需要使用iconv$str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);

至于获取引号之间的值,请参阅其他答案。使用@987654322@ 对匹配项执行上述转换。

编辑:用勺子喂所有东西:

<?php
$input = 'ööbik';
$expected = 'ööbik';

// Set the locale of your input here.
setlocale(LC_ALL, 'en_US');

// Convert using a callback.
$output = preg_replace_callback('/href="([^"]+)"/', function ($matches) {
    return iconv('UTF-8', 'ASCII//TRANSLIT', $matches[0]);
}, $input);

echo "Input:    $input\n";
echo "Expected: $expected\n";
echo "Output:   $output\n";

本示例假定 PHP 5.3。如果您停留在 PHP 5.2 或更低版本,请使用“create_function”或命名函数。

【讨论】:

  • 顺便说一句,我完全同意不使用正则表达式来解析 HTML。例如,此代码不适用于单引号 href='' 属性。例如,使用 DOMDocument::loadHTML。
  • 我只是喜欢新用户来这里快速回答然后vamoose!另外,我喜欢“vamoose”这个词。
【解决方案2】:

虽然 Stack Overflow 问题 Finding quoted strings with escaped quotes in C# using a regular expression 可能会帮助您找到引用的文本,但我认为更好的解决方案是通过解析 HTML 字符串并使用其 DOM 来做到这一点。

【讨论】:

  • 我同意在 HTML 上使用正则表达式通常是一个坏主意,但是当您只需要从 HTML 文档中获取非常特定的字符串时,例如单个属性,正则表达式就可以了。跨度>
  • 同意,视具体情况而定。
猜你喜欢
  • 1970-01-01
  • 2019-05-11
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多