Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 字符串中的多个文本替换,同时保留选定变量_Php_Regex_String_Url_Wildcard - Fatal编程技术网

Php 字符串中的多个文本替换,同时保留选定变量

Php 字符串中的多个文本替换,同时保留选定变量,php,regex,string,url,wildcard,Php,Regex,String,Url,Wildcard,我有一个web脚本,它将HTML页面创建为PHP字符串,然后将其交付给用户。所有页面都由index.php生成,具有唯一的url domain.host.com/index.php?loadpage=/BLAH 主页是静态HTML,但其他每个页面都会动态生成此PHP字符串。这可能看起来像我漫无边际,只是试图提供尽可能多的信息。我创建了一个javascript代码来修改链接url: <a href="http://domain.com/BLAH" onclick="location.hr

我有一个web脚本,它将HTML页面创建为PHP字符串,然后将其交付给用户。所有页面都由index.php生成,具有唯一的url

domain.host.com/index.php?loadpage=/BLAH
主页是静态HTML,但其他每个页面都会动态生成此PHP字符串。这可能看起来像我漫无边际,只是试图提供尽可能多的信息。我创建了一个javascript代码来修改链接url:

 <a href="http://domain.com/BLAH" onclick="location.href='?loadpage=/BLAH'; return false;" title="BLAH Description">BLAH Link</a>
并将其替换为:

href="http://domain.com/ [WILDCARD] " onclick="location.href='?loadpage=/ [WILDCARD] '; return false;" title=
这对我来说似乎非常复杂,我认为可能是
ereg
/
preg match
/
replace
,但对regex没有任何线索

在一个简短的总结中,我需要一些方法来搜索包含整页html的php字符串,并用第二个字符串替换第一个字符串(在每次出现带有“?loadpage/”的链接时)。但是每个链接都有不同的
[通配符]
,因此我假设脚本需要找到每一个字符串,保存
[WILDCARD]
添加到一个变量,然后执行replace函数,并从第一个url中插入刚刚保存为变量的单词its

编辑

为了澄清原始链接的外观:

<a id="random" href="?loadpage=/BLAH" title="BLAH Title"></a>


这就是为什么我只从
href
属性进行搜索。

你是对的,你需要的是一个正则表达式。(你需要一个通配符替换就是线索)。这个答案不应该是一个完整的解决方案,只是让你知道正则表达式是如何工作的。我将把它与php集成在一起(试试preg\u match\u all)

这是您要匹配的模式:

"\?loadpage=\/([^"]*)"
\是正则表达式中具有特殊mean的字符的转义

所以忽略逃逸这是一个错误

"?loadpage=/   //the start of the string up to the wildcard part

()   // capturing parentheses, indicating a part that 
     // you want to access in the replace string

[^"]*  // any number of occurences of any character that is NOT doublequote
       // ^ is the negation symbol
       // * indicates "zero or more occurrences"


    followed by...
"   doublequote character
现在您需要一个替换字符串…为此,您只需要知道(捕获括号)允许您回忆匹配的那一部分。在大多数正则表达式风格中,您可以将这些字符串捕获到序列号变量中,通常表示为$1、$2、$3..\1\2\3…在您的情况下,您只有一个捕获变量要处理

所以你的替换字符串可能看起来像

"http://domain.com/$1/" onclick="location.href='?loadpage=/$1'; return false"
在perl中,您可以将整个过程放在一起,如下所示:

$string =~ s|"\?loadpage=\/([^"]*)"|"http://domain.com/$1/" onclick=\"location.href='?loadpage=/$1'\; return false"|g;
请注意,您不需要转义引号。这在php中可能有所不同

正如你将看到的,它很容易变得非常神秘。是一个有用的在线参考


只是为了让您知道您在看什么(您不需要在php中执行此操作)

=~
是perl正则表达式操作符(您不会在php中使用它,请查看preg_match文档)

那你就有表格了

s|match_pattern|replace_pattern|g;
其中s表示替换(与简单匹配相反) g表示全局匹配(否则进程将在第一次匹配时停止) |||是分隔符。通常写为//,但随后必须转义所有URL//,这将使不可识别性加倍


但是这是太多perl特定的细节了,请阅读php正则表达式文档!

我希望投票人认为您在提问之前需要做更多的功课……我不同意,我会很快给您提供部分答案……非常感谢,朋友……谢谢:)看起来我需要的是mate…下班回家后会有一场演出,大约一个小时的路程lol…但我会用php而不是perl编写代码…我对大多数php都很好,但perl对我来说是一个全新的概念:)非常感谢…不过我对regex一无所知…谢谢:)regex原则是相当中性的语言。我已经完成了一些从php到perl的代码移植,实际的正则表达式字符串根本不需要更改。好的,谢谢。我会尝试一下,让你知道我的进展情况……感谢你迄今为止提供的帮助!@FlyingShuttleBury-这可能会有点长。如果你需要更多帮助,也许你可以接受答案,并提出一个新问题一旦你解决了这个问题。
s|match_pattern|replace_pattern|g;