如何用PHP替换regex_?
这是我的字符串: Versandkosten(Versand-Kosten)(德国内陆) 我想替换括号中的第一部分,因此在替换后,它应该如下所示: Versandkosten(德国内陆) 第一部分并不总是相同的,但它总是这样的模式:(某物-某物) 这是我尝试过的,但它总是取代一切:如何用PHP替换regex_?,php,regex,Php,Regex,这是我的字符串: Versandkosten(Versand-Kosten)(德国内陆) 我想替换括号中的第一部分,因此在替换后,它应该如下所示: Versandkosten(德国内陆) 第一部分并不总是相同的,但它总是这样的模式:(某物-某物) 这是我尝试过的,但它总是取代一切: $title = 'Versandkosten (Versand - Kosten)(innerhalb Deutschlands)'; $title = preg_replace('/\(.+[-].+\)/',
$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)怎么办?
您希望得到什么输出?仅供参考,添加了完整的解释。:)谢谢,很高兴它有帮助。:)