如何从较大的字符串中检测具有特定模式的字符串?

时间:2015-06-17 08:56:28

标签: php regex preg-replace

我有一个很长的字符串,我想要检测并用其他文本替换。假设我的文字是'my first name is @[[Rameez]] and second name is @[[Rami]]'。我想检测@ [[Rameez]]并用Rameez动态替换所有同样的字符串。

3 个答案:

答案 0 :(得分:1)

你可以这样做:

preg_replace('/@\[\[(\w+)\]\]/', "$1", $string);

[]需要转义,因为它们在正则表达式中具有特殊含义。
这将替换@[[whatever]]

之前的任何字符串whatever

答案 1 :(得分:0)

您可以创建一个正则表达式模式,然后使用它来匹配,查找和替换给定的字符串。这是一个例子:

string input = "This is   text with   far  too   much   " + 
                     "whitespace.";
      string pattern = "\\s+";
      string replacement = " ";
      Regex rgx = new Regex(pattern);
      string result = rgx.Replace(input, replacement);

这是C#代码,但您可以将其应用于任何语言。在您的情况下,您可以使用string pattern = "@[[Rameez]]";之类的内容替换模式,然后使用不同的替换:string replacement = "Rameez"; 我希望这是有道理的。

答案 2 :(得分:0)

特定版本

View

通用版

正则表达式

onDragEvent()

描述

Regular expression visualization

// Find Rameez specifically $re = '/@\[\[(?<name>Rameez)\]\]/i'; // Use i flag if you to want a case insensitive search $str = 'my first name is @[[Rameez]] and second name is @[[Rami]].\nDid I forget to mention that my name is @[[rameez]]?'; echo preg_replace($re, '$1', '**RAMEEZ** (specific)<br/>' . PHP_EOL); 在这里代表一个命名的捕获组。有关详细信息,请参阅this answer

示例代码

@\[\[(?<name>.+?)\]\]

DEMO