preg-replace 相关问题

preg_replace()是一个PHP函数,它使用正则表达式执行字符串替换。

从文本中提取所有单词并删除特定不需要的单词

我想替换这个字符串: 这是我的商店,它的设计令人惊叹;它的创建者说它正在赔钱,他不想维持它 除 '(d...

回答 2 投票 0

使用 preg_replace 删除所有小于 15 的数字

我正在尝试使用 preg_replace 删除低于“15”的数字: $字符串='1 20 5 16 11 15 14'; 我期望 preg_replace 后的输出为 20 16 15 我怎样才能做到这一点?

回答 2 投票 0

PHP preg_replace 非字母数字字符和选择的连词,然后拆分

我想替换这个字符串: 这是我的商店,它的设计令人惊叹;它的创建者说它正在赔钱,他不想维持它 除 '(...

回答 2 投票 0

PHP 正则表达式从模式中删除不需要的值

我有一大堆抓取的名称和价格,类似于以下内容: Array([0] => 苹果3 [1] => £0.40 [2] => 香蕉6 [3] => £1.80 [4] => 柠檬[5] => 葡萄[6] => 梨5 ...

回答 7 投票 0

将子字符串包裹在 <strong> 标签中,而无需在替换时创建嵌套标签

我有一个单词数组,用于突出显示字符串中的单词,但是有些单词可能会作为短语的一部分出现,因此我希望该短语优先于单个

回答 2 投票 0

使用值数组(一次一个)替换字符串中的多个相同占位符

我想要做的是将输入字符串中的“[replace]”替换为替换数组中的相应值。值的总数会改变,但总是有相同的值...

回答 1 投票 0

替换包含不需要的空格的损坏的字母数字 ID 子字符串

我的内容是动态的,但字符串中的一些字符丢失了。我想替换这些字符以使其正确。我有完整的订单 ID,但在内容中它带有 sp...

回答 2 投票 0

php preg_replace - 保留指定字符+外文字母

我需要一个函数,从字符串中删除所有字符(未在模式中列出),但保留外语字母。我知道 preg_replace 有 \p“模式”,但由于某种原因我无法让它工作......

回答 2 投票 0

替换 HTML 页面文本中找到的 url 文件路径部分

给定 html 页面内的一些 url,我想替换一些 url,如下所示: 示例网址:https://example.com/cost-center/sub-one/article1 从那一个我想替换 /cost-

回答 2 投票 0

PHP preg_replace 双引号不起作用

我将 csv 加载到数组中。 如果还没有,我想将 " 放入第 21 列。这是第 21 列的示例。有些是空的。在我的例子中是 $data[21]。 21 14英寸 14英寸 14英寸 空的 16...

回答 1 投票 0

将 html 标题转换为 PHP 中的列表元素

我正在学习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) ); } 我假设标题中没有标记,但如果需要,只需要进行一些更改即可复制内部标记。

回答 2 投票 0

php 的简码 preg_replace

我正在学习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 投票 0

PHP preg_替换反斜杠\

非常简单的问题:如何 preg_replace 反斜杠字符?

回答 7 投票 0

使用 PHP/Preg,如何替换后面没有任何字符的字符串

例如,我有两个字符串1/“abcdef”2/“abcdefghijk”。 我想替换第一个,但不想替换以相同字符串开头的第二个。然而,第一个...

回答 1 投票 0

屏蔽除第一个字母以外的所有坏词

我正在尝试在 PHP 中创建一个坏词过滤器,它将搜索文本,与一组已知的坏词进行匹配,然后用

回答 5 投票 0

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 中没有任何隐藏字符(这可能是也可能不是问题,具体取决于使用情况)。

回答 2 投票 0

PHP Preg_match 模式从字幕 srt 文件中删除时间

我需要一个 preg_match 表达式来删除 .srt 字幕文件(作为字符串导入)中的所有计时,但我永远无法完全理解正则表达式模式。例如,它会改变: ...

回答 5 投票 0

str_replace %%~na批处理文件中的文件名[关闭]

我想替换批处理文件中的当前文件名 对于 ("*.mp4") 中的 %%a 执行 ffmpeg -i "%%~a" -vf "drawtext=text=%%~na:fontfile='C\:\Users\harin\Desktop\test\F ...

回答 1 投票 0

用新行替换所有出现的句号,除非它是在 PHP 的电子邮件中

尝试找到一个解决方案来替换句子中所有出现的句号,除非它是电子邮件。 例如 输入: 您好,感谢您联系我们,我们非常感谢您的反馈!我们一直在尝试...

回答 1 投票 0

删除电话号码前的第一个 1 和空格?

我进行了搜索,认为这很容易找到。虽然我还没有找到任何与我需要的东西相关的东西,但类似的问题来自海外的人,他们的电话不同

回答 3 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.