Php 预更换或str更换

Php 预更换或str更换,php,preg-replace,str-replace,Php,Preg Replace,Str Replace,我有一些文字,像这样: Paragraphs of text (SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT) Some additional paragraphs of text $new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text); 我想要的是保留未知文本,但去掉(一些已知文本)和(一些其他已知文本)

我有一些文字,像这样:

Paragraphs of text
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
Some additional paragraphs of text
$new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text);
我想要的是保留未知文本,但去掉(一些已知文本)(一些其他已知文本)

我想preg_replace会给我想要的,但我需要正则表达式来替换它:

(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
用这个

Unknown Text
我看到preg\u replace包含3个参数,regex替换文本,以及主题

有没有办法将未知文本的值传递给替换文本参数,或者有没有办法在不删除未知文本的情况下重新启用左右部分(一些已知文本)(一些其他已知文本)?或者,是否有str_replace()解决方案

谢谢

---更新---


(一些其他已知文本)片段可能存在于文本中的其他位置,但我不希望将其删除,除非它遵循(一些已知文本)未知文本(一些其他已知文本)的模式。我认为最初的stru_-replace建议不会因此起作用。

如果这两个文本确实是已知的,您可以这样做:

$result = str_replace(array('(SOME KNOWN TEXT)', '(SOME OTHER KNOWN TEXT)'), '', '(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)');

这比正则表达式的性能更好。第一个参数是要替换的键集,第二个参数是要替换的内容,第三个参数是主题。

您可以简单地为str_replace提供一个要删除的字符串数组:

$destString = str_replace(array('TEXT A', 'TEXT B'), '', $sourceString);

如果您不需要任何聪明的模式匹配,这将是一个比regex更快的解决方案。

条件是什么?如果您有:

(一些其他已知文本)未知文本(一些已知文本)

(即,如果括号中的文字已被替换),是否仍要删除?已知文本必须始终位于行的开头或结尾吗?如果这两个问题的答案都是肯定的,那么最好使用正则表达式。大概是这样的:

Paragraphs of text
(SOME KNOWN TEXT)Unknown Text(SOME OTHER KNOWN TEXT)
Some additional paragraphs of text
$new_text = preg_replace('/^\(SOME KNOWN TEXT\)(.+)\(SOME OTHER KNOWN TEXT\)$/m, '$1', $text);
反斜杠(
\
)用于转义
字符,这些字符在正则表达式中具有特殊含义。我假设您希望更改内容-您可以在此时删除它们

在这个正则表达式中,是一个特殊的运算符,表示“任意字符”。它将匹配任意字符。表示“一个或多个”,是前一个运算符上的修饰符-加在一起,可以解释为匹配“任何字符中的一个或多个”。
字符用于捕获文档中的文本部分。通过将
+
括在括号中,我们可以捕捉到这一点,以便在替换中使用。被
包围的第一部分由正则表达式引擎标记为
$1
。如果我们有更多,他们会被标为
$2
$3
,等等


如果两者都不适用,您可以使用其他答案中提到的
str_replace
功能。

它可以工作!您能解释一下$1是如何填充我想要保留的项目的吗?它可以工作,但性能较低,因此,如果字符串中的其他地方有两个不想要的项目,请确保您不想要结果。@onernerd:我已将信息添加到答案中,以及有关
+
运算符的更多信息的链接。