簡體   English   中英

如何用特定字符串替換模式的所有實例?

[英]How do you replace all instances of a pattern with a specific string?

鑒於以下...

$rows = [
    'Blah *-*-*-*-*-*-*-* Blah',
    'Blah *-*-*-*-*-*-*-*-* Blah',
    'Blah *-*-*-*-*-*-*-*-*-*-*-*-* Blah',
];

...我將如何用***替換未知長度的糟糕重復模式,所以結果將是...

$result = [
   'Blah *** Blah',
   'Blah *** Blah',
   'Blah *** Blah',
];

我完全不清楚在正則表達式中重復模式是如何工作的。 我試過了

foreach ($rows as $r) {
    echo preg_replace('/[\*\-]{3,}/', '***', $r) .'<br>';
}

和許多其他變體。 這是一件容易的事嗎?

編輯:我花了 30 分鍾在 stackoverflow 上尋找答案,但發現很難弄清楚要問什么問題。 我找不到相關的答案。 因此,我們也將不勝感激提出問題的任何幫助:)

這就是我要解決的方法...

<?php

$rows = [
    'Blah *-*-*-*-*-*-*-* Blah',
    'Blah *-*-*-*-*-*-*-*-* Blah',
    'Blah *-*-*-*-*-*-*-*-*-*-*-*-* Blah',
];

array_walk($rows, function (&$row)
{
    $row = preg_replace('/^(.*) [*-]+ (.*)$/', '$1 *** $2', $row);
});

[*-]+告訴正則表達式查找任意數量的*-字符。

結果

Array
(
    [0] => Blah *** Blah
    [1] => Blah *** Blah
    [2] => Blah *** Blah
)

Regex101.com 沙盒

您可以給preg_replace()一個數組,它將在所有數組元素中執行替換。 它返回一個新的結果數組,它不會就地修改數組。

要匹配*后跟- ,請使用\*- ,而不是[\*\-] 后者匹配*-的單個字符。

$result = preg_replace('/(\*-){3,}\*/', '***', $rows);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM