preg_replace()是一个PHP函数,它使用正则表达式执行字符串替换。
*强文本*我有一个像“x”,“x,y”,“x,y,h”这样的字符串 我想用户 preg Replace 删除双引号内的逗号并将字符串返回为 “x”、“xy”、“xyh”
我正在尝试使用 preg_replace() 删除一段代码,但我在使其正常工作时遇到问题。 代码示例: $str = '这里有一些字符串'...
在小写字母后面插入一个点,然后插入一个空格,紧接着是一个大写字母
我正在努力完成以下任务: 搜索小写字母后跟大写字母。将其替换为小写字母,后跟 '. ',后跟大写字母。 示例...
将 BBCode [iframe] 占位符替换为 HTML <iframe> 标签
我有这个代码: $text = '[iframe=200x200]http://stackoverflow.com[iframe] '; $文本= preg_replace( '/\[iframe=(.*?)x(.*?)\](.*?)\[\/iframe\]/ms', ' <p>我有这个代码:</p> <pre><code>$text = '[iframe=200x200]http://stackoverflow.com[iframe] '; $text = preg_replace( '/\[iframe=(.*?)x(.*?)\](.*?)\[\/iframe\]/ms', '<iframe style="border: 1px solid rgb(204, 204, 204); width: \1px; height: \2px;" src="\3"></iframe>', $text ); echo $text; </code></pre> <p>为什么不起作用?</p> </question> <answer tick="true" vote="2"> <p>尝试:</p> <pre><code>$text = preg_replace('/\[iframe=(.*?)x(.*?)\](.*?)\[iframe\]/ms', '<iframe style="border: 1px solid rgb(204, 204, 204); width: \1px; height: \2px;" src="\3"></iframe>', $text); </code></pre> <p><pre><code>\[\/iframe\]</code></pre>中有一些不需要的斜杠,需要更改为<pre><code>\[iframe\]</code></pre></p> <p><strong>编辑:</strong></p> <p>实际上您的输入字符串看起来不正确,因为它没有结束 iframe 标记:</p> <pre><code>$text = '[iframe=200x200]http://stackoverflow.com[iframe] '; </code></pre> <p>应该是</p> <pre><code>$text = '[iframe=200x200]http://stackoverflow.com[/iframe] '; </code></pre> <p>如果字符串包含 <pre><code>/</code></pre>,您可以使用其他分隔符来避免转义字符串中的 <pre><code>/</code></pre>。比如:</p> <pre><code>$text = preg_replace('#\[iframe=(.*?)x(.*?)\](.*?)\[/iframe\]#ms', '<iframe style="border: 1px solid rgb(204, 204, 204); width: \1px; height: \2px;" src="\3"></iframe>', $text); </code></pre> </answer> <answer tick="false" vote="2"> <p>您输入的字符串有错误。结束标签处的 <pre><code>/</code></pre> 缺失</p> <p>[iframe=200x200]<a href="http://stackoverflow.com[/iframe]">http://stackoverflow.com[/iframe]</a></p> </answer> </body></html>
我期待着这个: echo preg_replace('/[^a-zA-z0-9]*/', '_', ' foo Bar #1 -'); 输出这个: 'foo_Bar_1_' 但是使用 ideone [http://www.ideone.com/Q80v3],它输出: '__f_o_o__B_a_r__1_...
将 URL 转换为 HTML 中的超链接,而不替换 src 属性值
我正在尝试转换 URL,但如果它们位于 src=" 之后则不会。到目前为止,我有这个... 返回 preg_replace('@(?!^src=")(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.-]*( \?\S+)?)?)?)@', ' 我正在尝试转换 URL,但如果它们位于 src=" 之后则不会。到目前为止,我有这个... return preg_replace('@(?!^src=")(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.-]*(\?\S+)?)?)?)@', '<a href="$1" target="_blank">$1</a>', $s); 它会转换 URL,但即使它是之前的 src="。 使其成为背后断言。 (?<!^src=") 我必须在没有最小可验证示例的情况下推断出此任务的意图。 通过利用合法的 DOM 解析器,您可以在很大程度上防止匹配包含其他合格 URL 值的非文本节点。 下面使用 XPath 查询来防止匹配已经是 <a> 标签子级的 URL 值。 仅针对 text(),无法替换标签属性值。 接下来是循环文本节点时的一些巧妙的魔法。 使用 preg_match_all() 隔离每个文本节点中的一个或多个节点 URL,然后创建一个新的 <a> 元素来替换文本的相应 URL 段。 使用 splitText() “吐出”URL 之前的文本前导部分——它将成为当前节点之前的新节点。 使用 replace_child() 将剩余文本替换为新的 <a> 节点。 使用 insertBefore() 将最初位于 URL 文本后面的文本作为新文本节点添加到前面。 代码:(演示) $html = <<<HTML <div> Some text <img src="https://example.com/foo?bar=food"> and a raw link http://example.com/number2 then <a href="https://example.com/the/third/url">original text</a> ... and <p>here's another HTTPS://www.example.net/booyah</p> and done </div> HTML; $dom = new DOMDocument(); $dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); $xpath = new DOMXPath($dom); $regex = '#\bhttps?://[-\w.]+(?::\d+)?(?:/(?:[\w/_.-]*(?:\?\S+)?)?)?#ui'; foreach ($xpath->query('//*[not(self::a)]/text()') as $textNode) { $text = $textNode->nodeValue; foreach (preg_match_all($regex, $text, $m) ? $m[0] : [] as $url) { $a = $dom->createElement('a', htmlspecialchars($url)); $a->setAttribute('href', $url); $mbPosOfUrlInText = mb_strpos($text, $url); // regurgitate any leading text as newpreceding node // then replace remainder of text with new hyperlink $textNode->parentNode->replaceChild( $a, $textNode->splitText($mbPosOfUrlInText) ); // add any text after url as new text node after new hyperlink $textNode->parentNode->insertBefore( $dom->createTextNode( mb_substr($text, $mbPosOfUrlInText + mb_strlen($url)) ), $a->nextSibling ); } } echo $dom->saveHTML(); 输出: <div> Some text <img src="https://example.com/foo?bar=food"> and a raw link <a href="http://example.com/number2">http://example.com/number2</a> then <a href="https://example.com/the/third/url">original text</a> ... and <p>here's another <a href="HTTPS://www.example.net/booyah">HTTPS://www.example.net/booyah</a></p> and done </div>
我正在尝试转换 URL,但如果它们位于 src=" 之后则不会。到目前为止,我有这个... 返回 preg_replace('@(?!^src=")(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.-]*( \?\S+)?)?)?)@', ' 我正在尝试转换 URL,但如果它们位于 src=" 之后则不会。到目前为止,我有这个... return preg_replace('@(?!^src=")(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.-]*(\?\S+)?)?)?)@', '<a href="$1" target="_blank">$1</a>', $s); 它会转换 URL,但即使它在 src=" 之前 使其成为背后断言。 (?<!^src=") 我必须在没有最小可验证示例的情况下推断出此任务的意图。 通过利用合法的 DOM 解析器,您可以在很大程度上防止匹配包含其他合格 URL 值的非文本节点。 下面使用 XPath 查询来防止匹配已经是 <a> 标签子级的 URL 值。 仅针对 text(),无法替换标签属性值。 接下来是循环文本节点时的一些巧妙的魔法。 使用 preg_match_all() 隔离每个文本节点中的一个或多个节点 URL,然后创建一个新的 <a> 元素来替换文本的相应 URL 段。 使用 splitText() “吐出”URL 之前的文本前导部分——它将成为当前节点之前的新节点。 使用 replace_child() 将剩余文本替换为新的 <a> 节点。 使用 insertBefore() 将最初位于 URL 文本后面的文本作为新文本节点添加到前面。 代码:(演示) $html = <<<HTML <div> Some text <img src="https://example.com/foo?bar=food"> and a raw link http://example.com/number2 then <a href="https://example.com/the/third/url">original text</a> ... and <p>here's another HTTPS://www.example.net/booyah</p> and done </div> HTML; $dom = new DOMDocument(); $dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); $xpath = new DOMXPath($dom); $regex = '#\bhttps?://[-\w.]+(?::\d+)?(?:/(?:[\w/_.-]*(?:\?\S+)?)?)?#ui'; foreach ($xpath->query('//*[not(self::a)]/text()') as $textNode) { $text = $textNode->nodeValue; foreach (preg_match_all($regex, $text, $m) ? $m[0] : [] as $url) { $a = $dom->createElement('a', htmlspecialchars($url)); $a->setAttribute('href', $url); $mbPosOfUrlInText = mb_strpos($text, $url); // regurgitate any leading text as newpreceding node // then replace remainder of text with new hyperlink $textNode->parentNode->replaceChild( $a, $textNode->splitText($mbPosOfUrlInText) ); // add any text after url as new text node after new hyperlink $textNode->parentNode->insertBefore( $dom->createTextNode( mb_substr($text, $mbPosOfUrlInText + mb_strlen($url)) ), $a->nextSibling ); } } echo $dom->saveHTML(); 输出: <div> Some text <img src="https://example.com/foo?bar=food"> and a raw link <a href="http://example.com/number2">http://example.com/number2</a> then <a href="https://example.com/the/third/url">original text</a> ... and <p>here's another <a href="HTTPS://www.example.net/booyah">HTTPS://www.example.net/booyah</a></p> and done </div>
$output = preg_replace("|(/D)(/s+)(/d+)(;)|", "//1,//3;", $output); 我正在尝试替换所有字母字符,后跟一个或多个空白字符(制表符和/或空格),后跟...
如何使用 preg_replace() 将一个字符串替换为另一个字符串?
你能帮我看看preg_replace中这个字符串变化的正则表达式是什么吗? 从“那天他在玩”到“他玩得很好”。
使用 preg_replace 修改字符串中的方括号占位符会错误地一次匹配多个占位符[重复]
我需要删除方括号短代码内的属性声明表达式。这是我的代码: $pattern = "#\[(.*)(rep=['\"]{1}1['\"]{1})(.*)\]#i"; $替换='...
使用 preg_replace() 将字母数字字符串从驼峰式命名法转换为短横线命名法
我现在有一个方法可以将我的camelCase字符串转换为kebab-case,但它分为三个preg_replace()调用: 公共函数camelToKebab($string, $us = "-") { // 插入...
用小写版本替换匹配的大写字母(camelCase 到 kebab-case)
我正在尝试制作一个 preg_replace() 模式来将文本“orderId”转换为“order-id”。 $argumentName = "订单ID"; $argumentName = preg_replace("/([A-Z])/e&quo...
我想在字符串中的字母数字(带空格)和非字母数字之间添加逗号。 我尝试过这个: $str = "这是!@#$%^&"; echo preg_replace("/([a-z0-9_\s])([^a-z0-...
我想在字符串中用逗号分割字母数字(带空格)和非字母数字。 我尝试用这个... $str = "这是!@#$%^&"; preg_replace("/([a-z0-9_\s])([^a-z0-9_])/i", "$1, $2", $s...
将 HTML 文档中的所有超链接 href 值转换为缩短的本地主机文件路径
我们想使用 preg_replace() 进行查找和替换,但无法得到想要的结果 这是我的字符串 $x = ' 我们想使用preg_replace()进行查找和替换,但无法得到想要的结果 这是我的绳子 $x = '<a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/2005/11/i_leave_shreds_.html#comment-11657412">FALLACI</a>'; $x .= '<a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/2005/10/i_leave_shreds_.html#comment-11657412">FALLACI</a>'; $x .= '<a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/20>';05/1/i_leave_shreds_.html#comment-11657412">FALLACI</a>'; $x .= '<a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/2005/9/i_leave_shreds_.html#comment-11657412">FALLACI</a>'; $x .= '<a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/2006/11/i_leave_shreds_.html#comment-11657412">FALLACI</a>'; $x .= '<a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/i_leave_shreds_.html#comment-11657412">FALLACI</a echo preg_replace('/<a(.*?)href="http:\/\/atlasshrugs2000.typepad.com\/atlas_shrugs\/([0-9\/]{0,7}?)(.*?)_.html#(.*?)"(.*?)>/','<a$1href="http://localhost/test/$3#$4"$5>',$x); 给出以下结果 <a href="http://localhost/test/2005/11/i_leave_shreds#comment-11657412">FALLACI</a> <a href="http://localhost/test/2005/10/i_leave_shreds#comment-11657412">FALLACI</a> <a href="http://localhost/test/2005/1/i_leave_shreds#comment-11657412">FALLACI</a> <a href="http://localhost/test/2005/9/i_leave_shreds#comment-11657412">FALLACI</a> <a href="http://localhost/test/2006/11/i_leave_shreds#comment-11657412">FALLACI</a> <a href="http://localhost/test/i_leave_shreds#comment-11657412">FALLACI</a> 但是我们想要这样的结果 <a href="http://localhost/test/i_leave_shreds#comment-11657412">FALLACI</a> <a href="http://localhost/test/i_leave_shreds#comment-11657412">FALLACI</a> <a href="http://localhost/test/i_leave_shreds#comment-11657412">FALLACI</a> <a href="http://localhost/test/i_leave_shreds#comment-11657412">FALLACI</a> <a href="http://localhost/test/i_leave_shreds#comment-11657412">FALLACI</a> <a href="http://localhost/test/i_leave_shreds#comment-11657412">FALLACI</a> 解决方案 如果我们从旁边排列您当前的正则表达式模式开始...... 这个: $x = '<a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/2005/11/i_leave_shreds_.html#comment-11657410">FALLACI</a>'; $x .= '<a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/2005/10/i_leave_shreds_.html#comment-11657411">FALLACI</a>'; $x .= '<a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/2005/1/i_leave_shreds_.html#comment-11657412">FALLACI</a>'; $x .= '<a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/2005/9/i_leave_shreds_.html#comment-11657413">FALLACI</a>'; $x .= '<a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/2006/11/i_leave_shreds_.html#comment-11657414">FALLACI</a>'; $x .= '<a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/i_leave_shreds_.html#comment-11657415">FALLACI</a>'; echo preg_replace('~<a.*?href=["\'].*?/([^/]*?)_\.html#(.*?)["\'].*?>(.*?)</a>~', "<a href='http://localhost/test/$1#$2'>$3</a><br>\n", $x); 输出: <a href='http://localhost/test/i_leave_shreds#comment-11657410'>FALLACI</a><br> <a href='http://localhost/test/i_leave_shreds#comment-11657411'>FALLACI</a><br> <a href='http://localhost/test/i_leave_shreds#comment-11657412'>FALLACI</a><br> <a href='http://localhost/test/i_leave_shreds#comment-11657413'>FALLACI</a><br> <a href='http://localhost/test/i_leave_shreds#comment-11657414'>FALLACI</a><br> <a href='http://localhost/test/i_leave_shreds#comment-11657415'>FALLACI</a><br> 正则表达式解释 ~<a.*?href=["'].*?/([^/]*?)_\.html#(.*?)["'].*?>(.*?)</a>~ ~ = 起始分隔符 <a.*? = 匹配开始的 a 标记,后跟任何字符 0 次或更多次,直到到达... href=["'] = 匹配 href= 后跟 " 或 ' .*?/ = 匹配所有字符,直到最后一个斜杠之前... ([^/]*?) = 捕获组并捕获最后一个斜线和...之间的所有内容 _\.html# = 匹配 URL 的下划线和 html 文件扩展名,后跟 # (.*?) = 捕获组匹配...之前的所有字符(注释/数字) ["'].*?> = 匹配 " 或 ' 后跟任何字符 0 次或多次,直到到达起始 a 标签的末尾:> (.*?) = 匹配开始和结束 a 标签之间的文本:FALLACI </a> = 匹配结束标记 a 更新 要将替换限制为仅包含以下内容:atlasshrugs2000.typepad.com,您可以将正则表达式更新为: ~<a.*?href=["\'].*?atlasshrugs2000.typepad.com.*?/([^/]*?)_\.html#(.*?)["\'].*?>(.*?)</a>~ 此正则表达式与原始正则表达式之间的区别是(上面要点列表的第 4 行): .*?/ <-- Original .*?atlasshrugs2000.typepad.com.*?/ <-- Updated 更新后的版本只是检查特定 URL http:// 之前的任何字符(例如 atlasshrugs2000.typepad.com)及其后的任何字符。 匹配示例(http/https/BLANK): <a href="http://atlasshrugs2000.typepad.com/atlas_shrugs/2005/11/i_leave_shreds_.html#comment-11657410">FALLACI</a> <a href="atlasshrugs2000.typepad.com/atlas_shrugs/2005/11/i_leave_shreds_.html#comment-11657410">FALLACI</a> <a href="https://atlasshrugs2000.typepad.com/atlas_shrugs/2005/11/i_leave_shreds_.html#comment-11657410">FALLACI</a> 问题就在这里:([0-9\/]{0,7}?)...您有 0-7 个实例,然后您希望获得尽可能少的实例。您不需要同时指定...删除 ?最后(所以它看起来像 ([0-9\/]{0,7}) )然后它就会起作用。 尝试: /<a(.*?)href="http:\/\/atlasshrugs2000.typepad.com\/atlas_shrugs\/([0-9\/]{0,7})\/(.*?)_.html#(.*?)"(.*?)>/ 将 {0,7}?)( 更改为 {0,7})\/(
将子字符串从第一个星号隔离到第二个星号,并在替换中使用匹配的第一个单词
我正在尝试在 PHP 中为 preg_replace() 创建正则表达式。 输入: 这就是我们*行动(如果)*fsfsffs 期望的输出: * 行动(如果)* 到目前为止我是他...
我正在尝试在 php 中为 preg_replace 创建正则表达式 输入: this us * 动作 (if) * fsfsffs 输出: * 动作(如果)* 到目前为止我还在这里, $文本= ...
仅当“@@”包含在“{{”和“}}”中时,才将“@@”替换为“#”
我必须根据某些规则替换大字符串中的一些字符: 我将尝试举几个例子,希望它比实际尝试解释规则更清楚: {{@文字@@...
我无法修复我的代码。 $2,123.01 asddasdsad$,.$$$ 我无法修复我的代码。 <? $tabla = "<table> <tr> <td> <a class='texto'>$ 2,123.01</a> </td> <td> asddasdsad$,.$$$ </td> </tr> </table>"; echo preg_replace("<a class='texto'>\$ ([0-9]*),([0-9]*).([0-9]*)</a>", "<a class='texto'>$0$1,$2</a>", $tabla); ?> PHP 错误:警告:preg_replace() [function.preg-replace]:未知修饰符 '$' 我想得到: <? <table> <tr> <td> <a class='texto'>2123,01</a> </td> <td> asddasdsad$,.$$$ </td> </tr> </table> ?> 我在这里尝试并测试了我的正则表达式http://regexpal.com/并且成功了,但是我在preg_replace()中出现了问题。 你犯了三个错误: 双引号内的 \$ 表示 $,正则表达式将其视为与行尾匹配 您忘记了模式分隔符 $0 指的是整个字符串。括号内的表达式为 称为 $1、$2 等 echo preg_replace("|<a class='texto'>\\\$ ([0-9]*),([0-9]*).([0-9]*)</a>|", "<a class='texto'>$1$2,$3</a>", $tabla); 正则表达式需要在实际表达式周围使用分隔符 <a class='texto'>\$ ([0-9]*),([0-9]*).([0-9]*)</a> 需要像: /<a class='texto'>\$ ([0-9]*),([0-9]*).([0-9]*)<\/a>/ 并转义表达式中可能存在的任何其他/ 或使用表达式中未出现的不同分隔符 #<a class='texto'>\$ ([0-9]*),([0-9]*).([0-9]*)</a># 可接受的分隔符列表
使用 PHP 的 preg_replace() 提供基于 URL 字符串中的语言标识符的页面路由
我想为我的网站添加一些语言支持,例如 mydomain.com/en/ mydomain.com/fr/ mydomain.com/de/ 我想将每个页面重定向到所选语言的等效页面,例如: mydomain.co...