preg_replace()是一个PHP函数,它使用正则表达式执行字符串替换。
我正在尝试从字符串中删除所有字符,除了: 字母数字字符 美元符号 ($) 下划线 (_) 代码点 U+0080 和 U+FFFF 之间的 Unicode 字符 前三张我都有了
在这种情况下是 preg_replace 还是 mb_ereg_replace?
我有这个正则表达式用于匹配 Unicode 中的空格: /^[\pZ\pC]+|[\pZ\pC]+$/u 我什至不确定它的作用,但它似乎有效。现在,在这种情况下,哪个函数更适用,为什么? $s...
我想替换这个字符串: 这是我的商店,它的设计令人惊叹;它的创建者说它正在赔钱,他不想维持它 除 '(d...
我正在尝试使用 preg_replace 删除低于“15”的数字: $字符串='1 20 5 16 11 15 14'; 我期望 preg_replace 后的输出为 20 16 15 我怎样才能做到这一点?
PHP preg_replace 非字母数字字符和选择的连词,然后拆分
我想替换这个字符串: 这是我的商店,它的设计令人惊叹;它的创建者说它正在赔钱,他不想维持它 除 '(...
我有一大堆抓取的名称和价格,类似于以下内容: Array([0] => 苹果3 [1] => £0.40 [2] => 香蕉6 [3] => £1.80 [4] => 柠檬[5] => 葡萄[6] => 梨5 ...
将子字符串包裹在 <strong> 标签中,而无需在替换时创建嵌套标签
我有一个单词数组,用于突出显示字符串中的单词,但是有些单词可能会作为短语的一部分出现,因此我希望该短语优先于单个
我想要做的是将输入字符串中的“[replace]”替换为替换数组中的相应值。值的总数会改变,但总是有相同的值...
我的内容是动态的,但字符串中的一些字符丢失了。我想替换这些字符以使其正确。我有完整的订单 ID,但在内容中它带有 sp...
php preg_replace - 保留指定字符+外文字母
我需要一个函数,从字符串中删除所有字符(未在模式中列出),但保留外语字母。我知道 preg_replace 有 \p“模式”,但由于某种原因我无法让它工作......
给定 html 页面内的一些 url,我想替换一些 url,如下所示: 示例网址:https://example.com/cost-center/sub-one/article1 从那一个我想替换 /cost-
我将 csv 加载到数组中。 如果还没有,我想将 " 放入第 21 列。这是第 21 列的示例。有些是空的。在我的例子中是 $data[21]。 21 14英寸 14英寸 14英寸 空的 16...
我正在学习php语言。 我想显示文章的目录。将标题(h2、h3、h4...)转换为列表并创建链接。 这是我的 php 代码。 $帖子=' 标题 01... 我正在学习php语言。 我想显示文章的目录。将标题 (h2,h3,h4,...) 转换为列表并创建链接。 这是我的 php 代码。 $Post = ' <h2>Title 01</h2> <h3>Title 01.01</h3> <h3>Title 01.02</h3> <h2>Title 02</h2> <h3>Title 02.02</h3> '; $c = 1; $r = preg_replace_callback('~<h*([^>]*)>~i', function($res) use (&$c){ return '<li><a id="#id'.$c++.'">'.$res[1].'</a></li>'; }, $Post); $Post = $r; echo '<ul>'; echo $Post; echo '</ul>'; 输出如下所示,但上面的代码运行错误。 <ul> <li><a id="#id1">2</a></li>Title 01<li><a id="#id2">/h2</a></li> <li><a id="#id3">3</a></li>Title 01.01<li><a id="#id4">/h3</a></li> <li><a id="#id5">3</a></li>Title 01.02<li><a id="#id6">/h3</a></li> <li><a id="#id7">2</a></li>Title 02<li><a id="#id8">/h2</a></li> <li><a id="#id9">3</a></li>Title 02.02<li><a id="#id10">/h3</a></li> </ul> 我知道 PHP 代码写得不正确。u200c但我想显示如下输出。 <ul> <li><a href="#id1">Title 01</a></li> <li><a href="#id2">Title 01.01</a></li> <li><a href="#id3">Title 01.02</a></li> <li><a href="#id4">Title 02</a></li> <li><a href="#id5">Title 02.02</a></li> </ul> 您的正则表达式不必要地复杂。 您可以使用 <h.>(.*)</h.> 来正确匹配您要匹配的内容。 我将其添加到您上面的代码片段中以显示您想要的结果: $post = ' <h2>Title 01</h2> <h3>Title 01.01</h3> <h3>Title 01.02</h3> <h2>Title 02</h2> <h3>Title 02.02</h3> '; $c = 1; $list_elements = preg_replace_callback('~<h.>(.*)</h.>~i', function($res) use (&$c){ return '<li><a id="#id'.$c++.'">'.$res[1].'</a></li>'; }, $post); echo '<ul>'; echo $list_elements; echo '</ul>'; 尽管如此,正如评论中所建议的,如果这不仅仅是一个玩具示例,您可能应该在这里使用解析器。那么正则表达式几乎总是搬起石头砸自己的脚。 您的正则表达式对于您想要执行的操作来说是错误的: ~<h*([^>]*)>~i <h* 表示它将匹配尖括号后跟 零个或多个 h。这基本上意味着您的正则表达式匹配每个 <> 配对之间的所有内容(包括 )。 您可以执行此操作从标题中提取标题: ~<h[1-6]>([^<]*)<\h[1-6]>~i 但是那些链接需要定位标题中的 ID,因此您需要执行以下操作来提取它们: ~<h[1-6] id="([^"]*)">([^<]*)<\h[1-6]>~i 但是如果标题上有其他属性怎么办? ~<h[1-6][^>]*(id="([^"*])"[^>]*)?>([^<]*)<\h[1-6]>~i 或标题内的标记? 正则表达式并不是解析 HTML 的好方法。它是一个强大的工具,可以使用它来实现此目的,但还有更好的方法。 $doc = new DOMDocument(); $doc->loadHTML($post); $xpath = new DOMXPath($doc); $headings = $xpath->query('html/body//*[self::h1 or self::h2 or self::h3]'); $nav = $xpath->query('html/body//nav/ul'); foreach ($headings as $heading) { $link = $doc->createElement('a'); $link->setAttribute('href', '#' . $heading->getAttribute('id')); $link->textContent = $heading->textContent; $nav->appendChild( $doc->createElement('li') ->appendChild($link) ); } 我假设标题中没有标记,但如果需要,只需要进行一些更改即可复制内部标记。
我正在学习php语言。我有两个函数,我想连接这两个函数并在一个输出 php.ini 中显示它们。 我正在学习语言php。我有两个函数,我想连接这两个函数并在一个输出中显示它们php。 <?php function link_follow($id) { $title = ''; $slug = ''; if ( $id == 44 ){ $title = 'Follow'; $slug = 'link/'.$id; $read = '<a href="follow/'. $slug .'">'. $title .' : '.$id.'</a>'; return $read; } return '-'; } function content_html($string) { $string = preg_replace('/\[FOLLOW_LINK id=(\d+)\]/i', link_follow('$1') , $string); return $string; } $content= 'it is a test. Link: [FOLLOW_LINK id=44]'; echo content_html($content); ?> 输出(html); it is a test. Link: - 但我想显示输出(html)如下: it is a test. Link: <a href="follow/link/44">Follow : 44</a> 它应该显示此代码<a href="follow/link/44">Follow : 44</a>。 我认为这段代码preg_replace不起作用。 因为您传递给函数的字符串'$1'没有特殊含义,所以您应该使用preg_replace_callback函数: preg_replace_callback('/\[FOLLOW_LINK id=(\d+)\]/i', 'link_follow', $string); function link_follow($matches) { $id = $matches[1]; ... }
例如,我有两个字符串1/“abcdef”2/“abcdefghijk”。 我想替换第一个,但不想替换以相同字符串开头的第二个。然而,第一个...
我正在尝试在 PHP 中创建一个坏词过滤器,它将搜索文本,与一组已知的坏词进行匹配,然后用
php preg_replace 用于所有出现的特定 html 标签
我要替换所有CONTENT内容。 m1 我们走吧 我要替换所有<pre><code>CONTENT</code></pre>内容。 <pre class="language-php"><code>m1 </code></pre> lets go <pre class="language-php"><code>m2 </code></pre> 但是运行 preg_replace("/<pre(.*)<\/pre>/s", "SAMAN", $input_lines); 会输出以下内容: SAMAN 当我需要这个输出时: SAMAN lets go SAMAN 这里是我的实时测试结果 * 量词是贪婪的,添加 ? 将其变为非贪婪。即你的正则表达式应该是:/<pre(.*?)<\/pre>/s 代码是: <?php $input_lines='<pre class="language-php"><code>m1 </code></pre> lets go <pre class="language-php"><code>m2 </code></pre>'; $new_string=preg_replace("/(\r?\n?<pre.*?\/pre>\r?\n?)/s","SAMAN",$input_lines); echo $new_string; ?> 输出: SAMAN lets go SAMAN 正则表达式模式说明: ( # Begin capture group \r?\n? # Optional newline characters on Windows and Linux <pre.*?\/pre> # Match from opening pre tag to closing pre tag \r?\n? # Optional newline characters on Windows and Linux ) # End capture group /s # Force all dots in pattern to allow newline characters 我的答案与 LeleDumbo 的答案非常相似,这可能会让提问者感到满意。我只是从结束预标记中省略了不必要的 < ,并包含了一些换行符,以便 $new_string 中没有任何隐藏字符(这可能是也可能不是问题,具体取决于使用情况)。
PHP Preg_match 模式从字幕 srt 文件中删除时间
我需要一个 preg_match 表达式来删除 .srt 字幕文件(作为字符串导入)中的所有计时,但我永远无法完全理解正则表达式模式。例如,它会改变: ...
str_replace %%~na批处理文件中的文件名[关闭]
我想替换批处理文件中的当前文件名 对于 ("*.mp4") 中的 %%a 执行 ffmpeg -i "%%~a" -vf "drawtext=text=%%~na:fontfile='C\:\Users\harin\Desktop\test\F ...