正则表达式规则在数组中

时间:2016-09-21 10:39:27

标签: php regex

也许它不能像我想的那样解决这个问题,但也许你可以帮助我们。

我的产品名称中有很多格式错误的字样。

其中一些标题为(,尾随)或其中之一,/"标记相同。

我所做的是我用空格分解产品的名称,并检查这些词。

所以我想把它们换成零。但是,硬盘可能是40GB ATA 3.5" hard drive。我需要处理所有单词,但我不能使用与3.5"()相同的方法,因为此//有效。

所以我只需要替换引号,当它位于字符串的开头和字符串的结尾处时。

3.5"

这很有效,但可以在一个$cases = [ '(testone)', '(testtwo', 'testthree)', '/otherone/', '/othertwo', 'otherthree/', '"anotherone', 'anothertwo"', '"anotherthree"', ]; $patterns = [ '/^\(/', '/\)$/', '~^/~', '~/$~', //Here is what I can not imagine, how to add the rule for `"` ]; $result = preg_replace($patterns, '', $cases); 中完成吗?如果有,有人可以帮我解决报价的模式吗?

引号的结果应为:

regex_replace()

2 个答案:

答案 0 :(得分:1)

您可以使用另一种方法:而不是定义一个模式数组,使用一个基于交替的正则表达式:

preg_replace('~^[(/]|[/)]$|^"(.*)"$~s', '$1', $s)

请参阅regex demo

<强>详情:

  • ^[(/] - 字符串开头的文字(/
  • | - 或
  • [/)]$ - 字符串末尾的文字)/
  • | - 或
  • ^"(.*)"$ - 字符串开头的",然后是任意0个字符(由于/s选项,.也匹配换行符序列)被捕获到组1中,而"被捕获到字符串的末尾。

替换模式为$1,当匹配前两个备选项时为空,如果匹配第三个备选项,则包含第1组值。

注意:如果您需要替换,直到找不到匹配项,请同时使用preg_matchpreg_replace一起使用(请参阅demo):

$s = '"/some text/"';
$re = '~^[(/]|[/)]$|^"(.*)"$~s';
$tmp = '';
while (preg_match($re, $s) && $tmp != $s) {
    $tmp = $s;
    $s = preg_replace($re, '$1', $s);
}
echo $s;

答案 1 :(得分:0)

这有效

preg_replace([[/(]?(.+)[/)]?|/\"(.+)\"/], '$1', $string)