preg-replace-callback 相关问题

preg_replace_callback()是一个PHP函数,它使用正则表达式查找子字符串和PHP回调函数来执行替换。

由于 e 修饰符弃用,将 preg_replace 替换为 preg_replace_callback

收到警告,因为 preg_replace 函数上的 e 修饰符已弃用。 这是代码,我建议应该用 preg_replace_callback 函数替换(对于 php 7.4.16): `$text = preg_rep...

回答 1 投票 0

忽略正则表达式中特定单词组合之间的单词(词汇表链接植入)

我已经编辑了我的问题并简化了它。 我创建了一个函数来突出显示文本中的词汇表,该函数可用于突出显示共轭单词(法语)。我工作得很好,但我想忽略言语......

回答 1 投票 0

用 ascii 字符替换所有十六进制序列

我正在编写一个简单的工具,用于将字符串中的所有十六进制替换为其等效的 ascii 值。 我可以用正则表达式替换内容;但是,当尝试在十六进制上运行 pack 时,它不会将其转换为 ch...

回答 2 投票 0

通过 preg_replace_callback 将所有十六进制替换为 Ascii

我正在编写一个简单的工具,用于将字符串中的所有十六进制替换为其等效的 ascii 值。 我可以用正则表达式替换内容;然而,当尝试在十六进制上运行 pack 时,它不会将其转换为 c...

回答 2 投票 0

脏话过滤器,用星号替换脏话的每个字母

我有一个工作函数,它获取一系列坏词,然后用星号替换坏词。 当我升级到PHP7后,自从使用了preg_replac后,我不得不使用preg_replace_callback...

回答 2 投票 0

带有 preg_replace_callback 的正则表达式用于脏话过滤器

我有一个工作函数,它获取一系列坏词,然后用星号替换坏词。 当我升级到 PHP7 时,我必须使用 preg_replace_callback,因为 preg_replace e mod...

回答 2 投票 0

php8 的 preg_replace_callback - 致命错误

由于 php8 不再支持 create_function ,如何更新此代码以避免致命错误? $str = @preg_replace_callback( '/>(\s*$\s*) 由于 php8 不再支持 create_function ,如何更新此代码以避免致命错误? $str = @preg_replace_callback( '/>(\s*$\s*)</m', create_function('$matches', "return strpos('$matches[0]', ' ') === false?'><':'> <';"), $str ); 我尝试过这个,但似乎不起作用。不会抛出任何错误。看出有什么明显的问题了吗? $str = @preg_replace_callback( '/>(\s*$\s*)</m', function($matches) { return strpos('$matches[0]', ' ') === false?'><':'> <'; }, $str ); 您的问题重复,答案确实存在这里 但是你的代码重写了: $str = @preg_replace_callback( '/>(\s*$\s*)</m', fn($matches) => strpos($matches[0], ' ') === false?'><':'> <', $str );

回答 1 投票 0

用查找数组中的值替换大括号占位符

我想知道是否有一种简单的方法可以使用 preg_replace 中的匹配模式作为替换值数组的索引。 例如 preg_replace("/\{[a-z_]*\}/i", "{$data_ar...

回答 4 投票 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将标题转换为ul列表

我正在学习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> 我知道Java代码写得不正确。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>';

回答 1 投票 0

如何限制 preg_replace_callback 以便它替换有限数量的表达式匹配?

我需要的例子: $input = "吧吧吧吧吧吧吧吧"; $result = preg_replace_callback('bar', 'foo', $input); // 而且必须有一些方法来限制 preg_replace_callback 以便它

回答 0 投票 0

可以加快PHP regex的速度。

我试着写了一个快速的正则表达式,但是当我测试时,PHP(preg_replace_callback)会有大量的步骤来获得结果,我认为这不是一个好的表现--这必须是 ...

回答 1 投票 0

[需要为php5.6更改preg_repalce

我在PHP程序的以下代码中将preg_replace更改为preg_replace_callback时遇到问题。函数category_get_tree($ prefix ='',$ tpl ='{name}',$ no_prefix = true,$ id = ...

回答 1 投票 1


为什么array(className,“ privateFunctionName”)返回私有函数?

class someClass {公共函数truncate($ content,$ amount = false){如果(!$ amount || preg_match_all(“ / \ s + /”,$ content,$ junk)<= $ amount)返回$ content; $ content = ...

回答 2 投票 0

我如何使用PHP preg_replace交换字符串?

我有CSS代码,我想将左右互换,将左右互换。这是CSS示例:.test {text-align:left; margin-left:10px; float:right} .test_right {text-align:left; border-right:0px; border -...

回答 1 投票 0

将preg_replace转换为preg_replace_callback,以查找单词并将其替换为变量

我有以下代码行:$ message = preg_replace('/ \ {\ {([a-zA-Z _-] +)\} \} / e',“ $$ 1”,$ body);这将用相同名称的变量替换被两个大括号括起来的单词。即{{...

回答 1 投票 0

[在PHP 5或PHP 7中从preg_replace转换为preg_replace_callback的转换

我有此特定代码,需要将其转换为preg_replace_callback,但是它返回的是实际变量,而不是变量的值。这是我的代码:preg_replace:$ ...

回答 1 投票 0

如何使用正则表达式按字母数字字符串拆分其字符?

我有一系列形式为10a99b5c 55 2a3b1 g的字符串,如何用字符分割字符串(字符总是在数字之间或在...的开头/结尾显示为单个字符)>

回答 1 投票 0

PHP:preg_replace_callback()如果出现以数字开头,则不起作用

我正在使用带有正则表达式的preg_replace_callback()来拾取一些标题内容并基于该内容创建ID,但如果出现的内容以数字开头并且我不知道,则似乎不起作用。]] >

回答 1 投票 0

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