标签: preg-replace

如何使用 preg_replace 从字符串中删除单个字符单词

鉴于以下输入 -

"I went to 1 ' and didn't see p"
Run Code Online (Sandbox Code Playgroud)

,PHP 的 preg_replace 函数的正则表达式是什么,用于删除所有单个字符(和剩余的空格),以便输出为 -

"went to and didn't see".

我一直在寻找解决方案,但找不到。类似的示例没有包含正则表达式的解释,因此我无法使它们适应我的问题。因此,如果您知道如何执行此操作,请提供正则表达式,但也请分解它,以便我能够理解它是如何工作的。

干杯

php regex preg-replace

3
推荐指数
1
解决办法
5077
查看次数

php:如何忽略 preg_replace 中的字母大小写?

我想匹配字符串中的文本,同时忽略它的字母大小写。如果字母大小写不相同,我的示例就会失败。

/*
  $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)

php preg-replace

3
推荐指数
1
解决办法
1736
查看次数

preg_replace href 锚点与锚文本

如何用每个锚文本替换所有锚。我的代码是

$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)

php regex preg-replace

3
推荐指数
1
解决办法
1160
查看次数

仅替换文件形式 preg_replace 中的特定组

我有包含内容的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)

php regex preg-replace preg-match

3
推荐指数
1
解决办法
3843
查看次数

使用 PHP preg_replace 匿名化 IPv4 和 IPv6 地址?

我需要匿名化 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 和一些正则表达式魔法的优雅解决方案?

php regex ipv4 ipv6 preg-replace

3
推荐指数
1
解决办法
1896
查看次数

php preg_replace 为每个捕获组分配不同的替换模式

我正在尝试以布尔模式执行 mysql 全文搜索,并且需要在构建 mysql 查询之前准备搜索文本。

为了实现这一目标,我认为我可以使用 PHP 函数preg_replace并用一种特定模式替换每个捕获组。

  1. 第一个模式必须找到引号 ( "hello world") 之间的单词或句子并在前面添加+( +"hello world")。
  2. 第二个模式必须找到其余单词(不带引号)并添加+前后*( +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 中实现这一点?先感谢您。


编辑/解决方案

感谢 …

php regex sql-injection preg-replace capturing-group

3
推荐指数
1
解决办法
1448
查看次数

将聊天文本中的成对符号替换为 html 标签,以设置粗体、斜体和删除线样式

我正在尝试制作 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)

我的问题是,我可以在一个正则表达式中完成所有这一切吗?输出时可以删除特殊字符吗?

html php regex parsing preg-replace

3
推荐指数
1
解决办法
3182
查看次数

正则表达式无法在两个匹配项中使用相同的字符

在下面的正则表达式中,当“ac”包含在两个斜杠之间时,我想匹配它的所有情况。第一个匹配,但第二个不匹配,因为第一次匹配使用了中间斜杠。有什么方法可以强制第二个“ac”也匹配?

https://regex101.com/r/WxTFJI/2

以下是我尝试过的

([\/])ac([\/])
Run Code Online (Sandbox Code Playgroud)

我的测试字符串是

/ac/ac/ 
Run Code Online (Sandbox Code Playgroud)

谢谢

regex preg-replace

3
推荐指数
1
解决办法
43
查看次数

在数字前后添加空格

我正在尝试在字符串中的任何数字之前和之后添加空格。例如,如果我有 JS35BX54NV33,我将得到 JS 35 BX 54 NV 33

我正在使用这个:

preg_replace("/(\\d)([a-z])/i", "$1 $2", $mystring)
Run Code Online (Sandbox Code Playgroud)

但它只在每个数字后面添加空格。

php regex preg-replace

3
推荐指数
1
解决办法
1367
查看次数

更改 preg 与数字的匹配

我试图通过对它们进行排序来用数字替换匹配项,但无法做到。我有一个字符串,单词之间有 {} 。我想将它们更改为 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)

php preg-replace preg-match

3
推荐指数
1
解决办法
45
查看次数