Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用PHP替换regex_?_Php_Regex - Fatal编程技术网

如何用PHP替换regex_?

如何用PHP替换regex_?,php,regex,Php,Regex,这是我的字符串: Versandkosten(Versand-Kosten)(德国内陆) 我想替换括号中的第一部分,因此在替换后,它应该如下所示: Versandkosten(德国内陆) 第一部分并不总是相同的,但它总是这样的模式:(某物-某物) 这是我尝试过的,但它总是取代一切: $title = 'Versandkosten (Versand - Kosten)(innerhalb Deutschlands)'; $title = preg_replace('/\(.+[-].+\)/',

这是我的字符串:

Versandkosten(Versand-Kosten)(德国内陆)

我想替换括号中的第一部分,因此在替换后,它应该如下所示:

Versandkosten(德国内陆)

第一部分并不总是相同的,但它总是这样的模式:(某物-某物)

这是我尝试过的,但它总是取代一切:

$title = 'Versandkosten (Versand - Kosten)(innerhalb Deutschlands)';
$title = preg_replace('/\(.+[-].+\)/', '', $title);
谢谢你的帮助

使用以下命令:

$replaced = preg_replace('~\([^)-]*-[^)]*\)~', '', $yourstring);
在中,查看底部的替换

解释

  • `(匹配左括号。)
  • [^)]*
    匹配既不是
    也不是
    -
    的任何字符
  • -
    匹配连字符
  • [^)]*
    匹配任何非
    字符。
  • `)匹配右括号
  • 我们将替换为空字符串
您可以使用:

$re = "/^([^()]*)\([^)]*\)(.*)$/m"; 

$result = preg_replace($re, '\1\2', $input);

如果要删除第一个
()
参数,可以尝试使用此正则表达式

(^.*?)(\([^\)]*\))
你的代码是

<?php
$string = 'Versandkosten (Versand - Kosten)(innerhalb Deutschlands)';
$pattern = "~(^.*?)(\([^\)]*\))~";
$replacement = "$1";
echo preg_replace($pattern, $replacement, $string);
?> //=> Versandkosten (innerhalb Deutschlands)
/=>Versandkosten(德国内陆)

实际上,您当前的正则表达式匹配(Versand-Kosten)(innerhalb Deutschlands)。是的,我知道;)。。。但是如何使其仅与第一部分匹配?尝试用
[a-zA-Z]
替换点。填写名称中可能包含的任何符号,或使用
\w
。重要的是它不包含
。由于圆点在正则表达式中的意思是“任何字符”,
被认为是有效的,并且在正则表达式中被捕获。如果输入是
Versandkosten(Versand)(innerhalb Deutschlands)怎么办?
您希望得到什么输出?仅供参考,添加了完整的解释。:)谢谢,很高兴它有帮助。:)