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:我已将信息添加到答案中,以及有关
和+
运算符的更多信息的链接。