preg-replace-callback 相关问题

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

如何根据特定条件搜索字符串并使用正则表达式替换特定值

我试图找到字符串中出现在某些单词后面的数字,并将前导零放在数字前面。 例如。 Apt 4, John Ave 应为 Apt 0004, John Ave 52 座,巷道

回答 3 投票 0

使用 preg_replace_callback() 跟踪替换计数

我有这个代码: 函数 pregRepler($matches) { * 做某事 } $str = preg_replace_callback($reg_exp, 'pregRepler', $str); 当在函数 pregRepler 中时,我想知道当前的 m...

回答 3 投票 0

使用从数据库获取的数据替换文本中的占位符

我正在尝试匹配动态生成的字符串的部分并根据提取的信息进行替换。我的问题是我无法理解如何制作正则表达式。 我有的只是一些

回答 4 投票 0

由于 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

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