【问题标题】:PHP Wildcard Usage and Replacing (may need REGEX)PHP 通配符的使用和替换(可能需要 REGEX)
【发布时间】:2017-07-31 23:48:45
【问题描述】:

对不起,问了一个愚蠢的问题,

但我有一个存储数据的变量(比如$my_data),其中多次使用像href="http://PAGE_PATH/the_page_name" 这样的URL。

我希望所有href="http://PAGE_PATH/the_page_name" 每次都变化the_page_name 被替换为onclick="jsonData('the_page_name', 'something')"

但我被困住了,因为the_page_name 每次都不一样。

我认为可能会使用一些类似str_replace 的功能?我不知道。

帮助赞赏!

编辑

我有一个我以前用过的例子,但这里the_page_name 没关系:

$base_paths = array("http://PAGE_PATH");
$web_paths  = array(link_url()."page");
$content = str_replace($base_paths,$web_paths, $this->input->post('pg_content'));

【问题讨论】:

  • 你的所有路径都在根目录下吗?还是其中一些有子文件夹或更多嵌套级别?
  • 我想str_replace($my_data . '"', '" onclick="jsonData(\'the_page_name\', \'something\')"', $string)。这也假设$my_data" 永远不会存在于元素之外。使用解析器会更干净/更准确。
  • 我所有的域名都是动态的,因为它们是在 codeigniter 下制作的

标签: php regex wildcard str-replace


【解决方案1】:

我认为正则表达式是您的解决方案

a link here

说明

/href="https?:/{2}\S*/([^\r\n\t\f ]+)"/g

href="http 匹配字符 href="http 字面意思(区分大小写)

s? 匹配字符 s 的字面意思(区分大小写)

? 量词 - 匹配 0 到 1 次,尽可能多次,按需回馈(贪心)

: 匹配字符 : 字面意思(区分大小写)

/{2} 匹配字符 / 字面意思(区分大小写)

{2} 量词 - 精确匹配 2 次​​p>

\S* 匹配任何非空白字符

* 量词 - 在零次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪)

/ 匹配字符 / 字面意思(区分大小写)

第一捕获组 ([^\r\n\t\f ]+)

匹配下面列表中不存在的单个字符 [^\r\n\t\f ]+

+ 量词 - 匹配一次到无限次,尽可能多次,按需回馈(贪婪)

\ 匹配字符 \ 字面意思(区分大小写)

r 匹配字符 r 字面意思(区分大小写)

\n 匹配换行符(换行符)(ASCII 10)

\t 匹配制表符(ASCII 9)

\f 匹配换页符(ASCII 12)

** ** 按字面意思匹配字符 [空格](区分大小写)

" 匹配字符 " 字面意思(区分大小写)

<?php

$mydata = 'Sorry for a silly question, but I have a variable (say $my_data) in
           which data is stored, where many times URL like
           href="http://PAGE_PATH/the_page_name1" has been used.

I want that all href="http://PAGE_PATH/the_page_name2" where the_page_name2 
varies every single time gets replaced with onclick="jsonData(\'the_page_name\', \'something\')"
href="http://PAGE_PATH/the_diff_name"
href="http://PAGE_PATH/the_other_name"
But I am stuck as the_page_name href="http://PAGE_PATH/another_name" are different every time.

I think some str_replace like functions may be used? I dont know.

Help Appreciated!';


$pattern = '/href="https?\:\/{2}\S*\/([^\\r\n\t\f ]+)"/i';
$replacement ='onclick="jsonData(\'\1\',\'something\')"';

echo "BEFORE<br/>$mydata<hr/>AFTER<br/>";
echo preg_replace($pattern, $replacement, $mydata );
?>

【讨论】:

  • 这个解决方案有用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 2019-04-30
  • 2021-03-24
相关资源
最近更新 更多