所以我有一个有效的 preg_match 模式来查找字符串中 HTML 属性的值,我需要用 preg_replace 做同样的事情——不是找到并返回值,而是用一个新的值替换它。
但是如果我只使用 preg_match 模式它不起作用......我被卡住了。
这是代码:
$string = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
width="437" height="288" id="viddler">
<param name="movie" value="http://www.viddler.com/player/1234567890/" />
<param name="allowScriptAccess" value="always" />
<param name="allowFullScreen" value="true" />
<param name="flashvars" value="fake=1"/>
<embed src="http://www.viddler.com/player/1234567890/"
width="437" height="288" type="application/x-shockwave-flash"
allowScriptAccess="always" allowFullScreen="true" flashvars="fake=1"
name="viddler" ></embed></object>';
preg_match("|<*[^>]*width=\"([^>]+)\"[^>]*>|Ui", $string, $results);
echo 'Width: '.$results[1];
Run Code Online (Sandbox Code Playgroud)
这有效并将返回437。但是,如果我在 preg_replace() 函数中使用相同的模式,它将删除整个<object>标签。我需要用其他任何东西替换那个 437,比如 200。当我们在做的时候,我还需要替换高度值。最后,这应该适用于任何嵌入代码或 iframe,因此它应该分别查找width="或height="......就像上面的 preg_match 示例一样。
任何帮助深表感谢。
编辑:蒂姆的解决方案如下
我让蒂姆的模式进行了一个小的修改:
$interm = preg_replace('|(<*[^>]*width=)"[^>]+"([^>]*>)|Ui', '\1"200"\2', $string);
$result = preg_replace('|(<*[^>]*height=)"[^>]+"([^>]*>)|Ui', '\1"300"\2', $interm);
Run Code Online (Sandbox Code Playgroud)
如果没有这个更改,第一个函数会替换宽度,但它会删除标签中之后的所有属性。 …
我有这个代码,但 PHP 给了我一个Unknown modifier '?'错误。
有谁知道我做错了什么?(我在网上找到了代码,因为我不熟悉正则表达式)
$old = "<FONT></FONT><P></P><TR></TR>";
$newString = preg_replace("/</?\w+/e/", "strtolower('\\0')", $old);
echo $newString ."<br/>";
Run Code Online (Sandbox Code Playgroud) 这是我的来源
$Message = $_GET["message"];
$Username = htmlspecialchars($_GET["username"]);
$unix = ($_GET["time"]);
include 'mcheck.php';
$file1 = file_get_contents('filter.txt');
$bad_words = explode(PHP_EOL, $file1);
$compare = explode('', $Message);
foreach ($bad_words as $bad_word)
$Message = preg_replace('/\b('.$bad_word.')\b/i', "***", $Message);
echo $Message;
Run Code Online (Sandbox Code Playgroud)
说坏话就是 go
和 $Message = I Like to go to school
我想要它 echo I Like to *** to school
但我得到了
***I***Like***To******to***school***
Run Code Online (Sandbox Code Playgroud)
我不知道问题是什么
我有一个适用于多种语言的网站,我正在寻找一个 php 函数来从跨多种语言的字符串中去除所有垃圾。
示例:我将以下内容以印地语插入到我的数据库中,但对于其他语言也是如此。
??????? ?? ????? ???????? ????? ????...\'
所以你可以看到我得到了不需要的 ...\' 字符。
这并不适用于多种语言
$newString = preg_replace('/[^a-z0-9]/i', ' ', $text);
Run Code Online (Sandbox Code Playgroud)
我也试过,我真的不明白这里发生了什么,这也不起作用。
$newString = preg_replace(''/^[\p{L}\p{M}\p{Nd}]{2,}$/u'', ' ', $text);
Run Code Online (Sandbox Code Playgroud)
我真的只需要去掉键盘上不是字母或数字的所有东西,即
!@£$%^&*()_+=.<>/, etc etc
Run Code Online (Sandbox Code Playgroud)
我不确定字符串中的 ...\' 是否真的不是它看起来的样子,如果这有意义的话,因为如果我跑了。
$newString = str_replace("...\'", "", $text);
Run Code Online (Sandbox Code Playgroud)
这是我第一次真正深入了解多语言。
我一直试图找出一段时间的解决方案,但没有找到一个可靠的工作方式.
我有一个字符串,其中每个换行符表示为零(0)
$string ="The quick brown fox0jumped over the lazy dog 0with 1308mm to spare.";
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种方法,用html标签"br"替换不属于数字的每个0.
到目前为止,我得到的最接近的是:
preg_replace('/([a-zA-Z ])0([a-zA-Z ])/', '$1\<br\>$2', $string);
Run Code Online (Sandbox Code Playgroud) 所以,我有一些数据库,我使用正则表达式来处理所有这些行.但问题是电子邮件部分可能没有或没有单个"@"符号.我决定在域之前放置@(其中没有很多)然后只删除我不需要的所有@.我使用了一些在线正则表达式构造函数 - 就像这个http://www.phpliveregex.com/.我得到了以下正则表达式,用于在域之前放置@:
preg_replace("/(dodgit|trashymail|pookmail|spambob|mailinator)/", "@$1", $myline);
Run Code Online (Sandbox Code Playgroud)
但它只是不起作用.例如:
CynthiaELopezdodgit.com
Run Code Online (Sandbox Code Playgroud)
在此脚本之后不会更改.
有什么不对?我是PHP的新手,很抱歉,如果问题真的很愚蠢:)
我正在编写一个搜索引擎.基本上,如果出现某个单词,我需要在该单词之后立即抓住并删除该单词.
如果出现"瑜伽"这个词,我需要在它之后删除这个词,这里是"垫子".所以我会得到:
$sentence="I like yoga mats a lot.";
$word="mats";
$result=I like yoga a lot.
Run Code Online (Sandbox Code Playgroud)
我看过strpos,但需要一个字.我也有preg_split它按名称删除单词,但我还需要按位置删除这个特定的单词.
$separate = preg_split('/\s+/', $sentence);
Run Code Online (Sandbox Code Playgroud)
考虑到它之后的单词并不总是垫子,我怎么能在'瑜伽'之后删除这个单词.我仍然需要很多话.
我有以下方式的数据:
{"id": "sugarcrm", "text": "sugarcrm", "children": [ [ { "id": "accounts", "text": "accounts", "children": [ { "id": "id", "text": "id" }, { "id": "name", "text": "name" } ] } ] ] }
Run Code Online (Sandbox Code Playgroud)
现在,我想删除括号,即实例[和]是否有这样的两个连续的情况下,[ [或] ]。
现在,如果你看到上面的数据,你会在这里看到,有实例[和]其连续两次重复。所以我想删除每个的一个实例。
现在,我可以检查每个的两个连续重复的实例并删除一个,就像这样
$text = '{"id": "sugarcrm", "text": "sugarcrm", "children": [ [ { "id": "accounts", "text": "accounts", "children": [ { "id": "id", "text": "id" }, { "id": "name", "text": "name" } ] } ] …Run Code Online (Sandbox Code Playgroud) 如何将 bbcode[url]标签转换为<a>在开始和结束标签之间具有 href 属性和文本的标签?
以下是一些示例字符串:
[url]https://any.com/any[/url]
[URL="https://any.com/any?any=333"]text text[/URL]
[url]http://www.any.com/any?any=44#sss[/url]
*请注意,开始[url]标记中的双引号子字符串是可选的,并且会影响所需的输出...
我试过这种模式:
(?:\[url="(https?://(?:www)?.+?)\]|\[url\](https?://(?:www)?.+\[))
\[url="(https?:\/\/(?:www\.)?.+?)\]|\[url\](https?:\/\/(?:www\.)?.+)\[\/url\]
\[url="(https?:\/\/(?:www\.)?.+)"\]|\[url\](https?:\/\/(?:www\.)?.+)\[\/url\]
Run Code Online (Sandbox Code Playgroud)
像这样:
$pattern ='##i';
$text = preg_replace($pattern,'',$text);
Run Code Online (Sandbox Code Playgroud)
从上面的 bbcode url 标签中,我想要的结果应该是:
<a href="https://any.com/any">https://any.com/any</a>
<a href="https://any.com/any?any=333">text text</a>
<a href="http://www.any.com/any?any=44#sss">http://www.any.com/any?any=44#sss</a>
换句话说,如果 url 位于开始[url]标记的双引号部分,则使用该值作为href值并将[url]标记的 innerHTML保留为生成的<a>标记的 innerHTML 。
如果URL不在双引号部分,但位于打开和关闭之间的[url]标签,然后使用该值作为这两个href值和的的innerHTML <a>。
anubhava关于匹配 unicode 字符范围的回答使我使用正则表达式来清理特定范围的单个代码点字符。有了它,现在我可以用这个简单的表达式匹配这个列表中的所有杂项(包括表情符号):
preg_replace('/[\x{2600}-\x{26FF}]/u', '', $str);
Run Code Online (Sandbox Code Playgroud)
但是,我也想匹配这个配对/双代理表情符号列表中的那些,但正如nhahtdh 在评论中解释的那样:
有一个范围从
d800到dfff指定 UTF-16 中的代理,以允许指定更多字符。甲单个替代不在UTF-16是有效的字符(一对是必要指定一个有效字符)。
因此,例如,当我尝试这样做时:
preg_replace('/\x{D83D}\x{DE00}/u', '', $str);
Run Code Online (Sandbox Code Playgroud)
仅替换此列表中配对代理中的第一个,即:
PHP抛出这个:
preg_replace(): 编译失败: 不允许的 Unicode 代码点(>= 0xd800 && <= 0xdfff)
我尝试了几种不同的组合,包括UTF8 中上述代码点的假定组合( '/[\x{00F0}\x{009F}\x{0098}\x{0080}]/u'),但我仍然无法匹配它。我还研究了其他PCRE 模式修饰符,但它似乎u是唯一允许指向 UTF8 的修饰符。
我在这里错过了任何“逃生”选择吗?
php ×10
preg-replace ×10
regex ×7
bbcode ×1
expression ×1
hyperlink ×1
multilingual ×1
preg-split ×1
strpos ×1
unicode ×1