我正在开发一个 WordPress 插件,它将帖子和相关数据导出为制表符分隔的文本格式。它即将完成,但我正在努力寻找将 HTML 重新处理为单个字符串的最佳方法。
我使用 preg_replace 和 htmlentities 的组合,但它变得有点混乱。
我确信一定有一种首选方法可以做到这一点,所以我想我应该和你确认一下?我在谷歌上找不到任何合适的东西。
例如,<a href="http://msdn.microsoft.com/art029nr/">remove links to here but keep text</a> but <a href="http://herpyderp.com">leave all other links alone</a>
我一直在尝试使用 preg_replace 来解决这个问题。我在这里进行了搜索并找到了解决部分问题的答案。
PHP的答案:从文本中删除特定域的所有超链接会删除指向特定 url 的链接,但也会删除文本。
http://php-opensource-help.blogspot.ie/2010/10/how-to-remove-hyperlink-from-string.html的网站从字符串中删除超链接,但我似乎无法修改模式以便它仅适用于特定网站。
我尝试在下划线破折号之后获取姓氏
$x = "John_Chio_Guy";
Run Code Online (Sandbox Code Playgroud)
输出应该是:Guy
这是我当前的代码:
$x = "John_Chio_Guy";
$x = preg_replace("/^[^_]*_\s*/", "", $x);
echo $x;
//output : Chio_Guy
Run Code Online (Sandbox Code Playgroud) preg_split在用空格替换字母或数字以外的任何内容之后,我试图用任意数量的空格分割字符串...这是我的代码(包含一些调试内容):
$input = strtolower($data_current[0]);
$input = preg_replace('/[^a-z0-9]/', ' ', $input);
echo($input."\r\n");
$array = preg_split('/[\s]+/', $input, PREG_SPLIT_NO_EMPTY);
print_r($array);
die;
Run Code Online (Sandbox Code Playgroud)
假设 的值为$data_current[0]“hello world”。我得到的输出是这样的......
hello world
array
(
[0] => hello world
)
Run Code Online (Sandbox Code Playgroud)
显然,我期望一个具有两个值的数组......“hello”和“world”。
这里到底发生了什么?如果有帮助的话,$data_current可以从 CSV 中读取数组(使用) ...fgetcsv
假设我们preg_replace在数百万个帖子字符串上使用它:
function makeClickableLinks($s) {
return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s);
}
Run Code Online (Sandbox Code Playgroud)
假设所有帖子中只有 10% 包含链接,strpos($string, 'http') !== false在调用之前检查会更快preg_replace()吗?如果是这样,为什么?不在preg_replace()内部执行一些预测试?
我当前正在从数据库中检索数据。我收到一个数组,其中包含带有 UTF8 编码值的“标题”索引。我想要的是使用这个值作为保存某些内容的文件的名称,所以我这样做:
\n\nfile_put_contents($filename, $content);\nRun Code Online (Sandbox Code Playgroud)\n\n$文件名在哪里
\n\n\'-\' . $category[\'root\'] . \'-articles-\' . $category[\'id\'] . \'-\' . $this->Urlize($category[\'category\'])\nRun Code Online (Sandbox Code Playgroud)\n\n这是“Urlize”的代码:
\n\nprivate function Urlize($value)\n{\n if ($value != null && trim($value) != \'\')\n {\n $value = preg_replace(\'/([\\[\\(].*[\\]\\)])/i\', \'\', $value);\n $value = preg_replace(\'/[\\s]/i\', \'-\', $value);\n $value = preg_replace(\'/[,!?.;:\\"\\\'&+\\/]/i\', \'-\', $value);\n $value = preg_replace(\'/[-]+/i\', \'-\', $value);\n $value = preg_replace(\'/(^-)/i\', \'\', $value);\n $value = preg_replace(\'/-$/i\', \'\', $value);\n $value = preg_replace(\'/[\xc3\xa9\xc3\xa8\xc3\xaa]/i\', \'e\', $value);\n $value = preg_replace(\'/[\xc3\xa2\xc3\xa0]/i\', \'a\', $value);\n $value = preg_replace(\'/[\xc3\xb6\xc3\xb4]/i\', \'o\', $value);\n …Run Code Online (Sandbox Code Playgroud) 我正在尝试从我的 wordpress 菜单中删除特定链接:
<li class="ubermenu-item ubermenu-item-type-post_type ubermenu-item-object-page ubermenu-item-1 ubermenu-item-level-0 ubermenu-column ubermenu-column-auto" ><a class="ubermenu-target ubermenu-item-layout-default ubermenu-item-layout-text_only" href="/first/" tabindex="0"><span class="ubermenu-target-title ubermenu-target-text">First</span></a></li>
<li class="ubermenu-item ubermenu-item-type-post_type ubermenu-item-object-page ubermenu-item-2 ubermenu-item-level-0 ubermenu-column ubermenu-column-auto" ><a class="ubermenu-target ubermenu-item-layout-default ubermenu-item-layout-text_only" href="/second/" tabindex="0"><span class="ubermenu-target-title ubermenu-target-text">Second</span></a></li>
<li class="ubermenu-item ubermenu-item-type-post_type ubermenu-item-object-page ubermenu-item-3 ubermenu-item-level-0 ubermenu-column ubermenu-column-auto" ><a class="ubermenu-target ubermenu-item-layout-default ubermenu-item-layout-text_only" href="/third/" tabindex="0"><span class="ubermenu-target-title ubermenu-target-text">Third</span></a></li>
function remove_link( $menu ) {
return str_replace( '<a href="', '<a>', $menu );
}
add_filter( 'wp_nav_menu', 'remove_link' );
Run Code Online (Sandbox Code Playgroud)
我试图删除的链接已.ubermenu-item-3附加到该li元素。我该怎么做?
我尝试使用preg_replace.
从这个字符串:
\n
\t\n
\n
4 290 €\n
\n
\n
\n
\n
Run Code Online (Sandbox Code Playgroud)
我尝试了以下模式:
(.*|\n)(\d+[[:blank:]]\d+)(.+|\n)preg_replace('/(.*|\n)(\d+[[:blank:]]\d+)(.+|\n)/', '$2', $string);preg_replace('/(\d+ \d+)/', '$1', $string);我想输出4290。上面的代码都不适合我。
谢谢你的提示
怎样才能用preg_replace在95040只保留第一个字符?
这是我的尝试,应该像我的在线正则表达式所示那样工作
但我拿回了原来的字符串。
$re = '/(^\d{1})/m';
$str = '9100';
$str = preg_replace($re, '$1', $str);
echo $str; //returns 9100
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
更新
我注意到以下代码返回9-->100而不是9:
$re = '/(^\d)/';
$str = '9100';
$str = preg_replace($re, '$1-->', $str);
echo $str; //returns 9-->100
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况以及如何预防?
如果文件中的注释覆盖了其中的 6 行,则应删除该注释并替换为与注释行数相等的空行。
这是我的意思的一个小示范。给定的 file.html 有 10 行:
line 1 : <!-- text
line 2 : text
line 3 : text
line 4 : empty line
line 5 : text
line 6 : -->
line 7 :empty line
line 8 :text
line 9 :empty line
line 10 :text
Run Code Online (Sandbox Code Playgroud)
预期的输出将是:
line 1 :empty line
line 2 :empty line
line 3 :empty line
line 4 :empty line
line 5 :empty line
line 6 :empty line
line 7 :empty line
line 8 :text …Run Code Online (Sandbox Code Playgroud) php ×10
preg-replace ×10
regex ×6
html ×1
hyperlink ×1
laravel ×1
preg-split ×1
str-replace ×1
strpos ×1
utf-8 ×1
wordpress ×1