鉴于以下输入 -
"I went to 1 ' and didn't see p"
Run Code Online (Sandbox Code Playgroud)
,PHP 的 preg_replace 函数的正则表达式是什么,用于删除所有单个字符(和剩余的空格),以便输出为 -
"went to and didn't see".
我一直在寻找解决方案,但找不到。类似的示例没有包含正则表达式的解释,因此我无法使它们适应我的问题。因此,如果您知道如何执行此操作,请提供正则表达式,但也请分解它,以便我能够理解它是如何工作的。
干杯
我想匹配字符串中的文本,同时忽略它的字母大小写。如果字母大小写不相同,我的示例就会失败。
/*
$text: fOoBaR
$str: little brown Foobar
return: little brown <strong>Foobar</strong>
*/
function bold($text, $str) {
// This fails to match if the letter cases are not the same
// Note: I do not want to change the returned $str letter case.
return preg_replace('/('.str_replace(array("/", "\\"), array("\/", "\\"), $text).')/', "<strong>$1</strong>", $str);
}
$phrase = [
'little brown Foobar' => 'fOoBaR',
'slash / slash' => 'h / sl',
'spoon' => 'oO',
'capital' => 'CAPITAL',
];
foreach($phrase as $str => $text)
echo …Run Code Online (Sandbox Code Playgroud) 如何用每个锚文本替换所有锚。我的代码是
$body='<p>The man was <a href="http://www.example.com/video/">dancing like a little boy</a> while all kids were watching ... </p>';
Run Code Online (Sandbox Code Playgroud)
我希望结果是:
<p>The man was dancing like a little boy while all kids were watching ... </p>
Run Code Online (Sandbox Code Playgroud)
我用了 :
$body= preg_replace('#<a href="https?://(?:.+\.)?ok.co.*?>.*?</a>#i', '$1', $body);
Run Code Online (Sandbox Code Playgroud)
结果是:
<p>The man was while all kids were watching ... </p>
Run Code Online (Sandbox Code Playgroud) 我有包含内容的txt文件:
fggfhfghfghf
$config['website'] = 'Olpa';
asdasdasdasdasdas
Run Code Online (Sandbox Code Playgroud)
以及用于替换文件中的 preg_replace 的 PHP 脚本:
write_file('tekst.txt', preg_replace('/\$config\[\'website\'] = \'(.*)\';/', 'aaaaaa', file_get_contents('tekst.txt')));
Run Code Online (Sandbox Code Playgroud)
但它并不能完全按照我想要的方式工作。
因为这个脚本替换了整个匹配,更改后它看起来像这样:
fggfhfghfghf
aaaaaa
asdasdasdasdasdas
Run Code Online (Sandbox Code Playgroud)
这很糟糕。
我想要的只是不改变整场比赛$config['website'] = 'Olpa';而只是改变这一点Olpa
如您所见,它不属于匹配信息的第 2 组。
我想要的只是改变这个第 2 组。一件特定的事情。
最后在脚本之后它看起来像:
fggfhfghfghf
$config['website'] = 'aaaaaa';
asdasdasdasdasdas
Run Code Online (Sandbox Code Playgroud) 我需要匿名化 IPv4 和 IPv6 地址,所以我编写了这个粗略的解决方案:
if (strlen($_SERVER['REMOTE_ADDR']) <= 15) { // Sorry: 15 NOT 12
echo htmlentities(substr_replace($_SERVER['REMOTE_ADDR'], 'XXX', -3), ENT_QUOTES);
} else {
echo htmlentities(substr_replace($_SERVER['REMOTE_ADDR'], 'XXXX:XXXX', -9), ENT_QUOTES);
}
Run Code Online (Sandbox Code Playgroud)
它适用于全长 IPv4 和 IPv6 地址,例如
207.142.131.005
2001:0db8:0000:08d3:0000:8a2e:0070:7344
但不是像这样的缩写地址
207.142.131.5
2001:0db8::8d3::8a2e:7:7344
我想知道是否有使用 preg_replace 和一些正则表达式魔法的优雅解决方案?
我正在尝试以布尔模式执行 mysql 全文搜索,并且需要在构建 mysql 查询之前准备搜索文本。
为了实现这一目标,我认为我可以使用 PHP 函数preg_replace并用一种特定模式替换每个捕获组。
"hello world") 之间的单词或句子并在前面添加+( +"hello world")。+前后*( +how*)。正则表达式模式
["']+([^"']+)["']+|([^\s"']+)
Run Code Online (Sandbox Code Playgroud)
替代模式
+"\1" +\2*
Run Code Online (Sandbox Code Playgroud)
例子
对于以下输入:
"hello world" how are you?
Run Code Online (Sandbox Code Playgroud)
它应该返回:
+"hello world" +how* +are* +you?*
Run Code Online (Sandbox Code Playgroud)
但相反,它返回一些“错误”的东西:
+"hello world" +* +"" +how* +"" +are* +"" +you?*
Run Code Online (Sandbox Code Playgroud)
我知道替换模式+"\1" +\2*永远不会起作用,因为我没有告诉任何地方+"..."应该只适用于第一个捕获组和+...*第二个捕获组。
PHP代码
$query = preg_replace('~["\']+([^"\']+)["\']+|([^\s"\']+)~', '+"\1" +\2*', $query);
Run Code Online (Sandbox Code Playgroud)
有没有办法在 PHP 中实现这一点?先感谢您。
编辑/解决方案
感谢 …
我正在尝试制作 Whatsapp 风格的文本帖子。当用户创建这样的文本时:
*Hi* ~how are you~ _where are you?_
Run Code Online (Sandbox Code Playgroud)
然后这个文本会像这样自动改变
嗨,你好吗,你在哪里
我知道我可以使用 php 正则表达式来做到这一点,如下所示:
该示例适用于粗体文本:
function makeBoldText($orimessage){
$message = $orimessage;
$regex = "/\*([\w]*)\*/";
$message = preg_replace($regex, '<strong>$0</strong>', $message);
return $message ;
}
echo makeBoldText($message);
Run Code Online (Sandbox Code Playgroud)
但有一个问题,*当输出文本时应该将其删除。
其他正则表达式也应该是这样的:
大胆的:
/\*([\w]*)\*/
Run Code Online (Sandbox Code Playgroud)
斜体:
/_([\w]*)_/
Run Code Online (Sandbox Code Playgroud)
删除线:
/~([\w]*)~/
Run Code Online (Sandbox Code Playgroud)
我的问题是,我可以在一个正则表达式中完成所有这一切吗?输出时可以删除特殊字符吗?
在下面的正则表达式中,当“ac”包含在两个斜杠之间时,我想匹配它的所有情况。第一个匹配,但第二个不匹配,因为第一次匹配使用了中间斜杠。有什么方法可以强制第二个“ac”也匹配?
https://regex101.com/r/WxTFJI/2
以下是我尝试过的
([\/])ac([\/])
Run Code Online (Sandbox Code Playgroud)
我的测试字符串是
/ac/ac/
Run Code Online (Sandbox Code Playgroud)
谢谢
我正在尝试在字符串中的任何数字之前和之后添加空格。例如,如果我有 JS35BX54NV33,我将得到 JS 35 BX 54 NV 33
我正在使用这个:
preg_replace("/(\\d)([a-z])/i", "$1 $2", $mystring)
Run Code Online (Sandbox Code Playgroud)
但它只在每个数字后面添加空格。
我试图通过对它们进行排序来用数字替换匹配项,但无法做到。我有一个字符串,单词之间有 {} 。我想将它们更改为 1、2、3 等,而不使用 foreach。可以与preg 匹配所有吗?
$string = 'sample {} test {} string {}';
Run Code Online (Sandbox Code Playgroud)
该字符串一定是这样的:sample (0) test (1) string (2)
这是我的代码:
$string_split = explode('{}', $string);
foreach($string as $string_word){
$i ++;
echo $string_word . $i . ' ';
}
Run Code Online (Sandbox Code Playgroud)