比较字符串并删除部分字符串

时间:2018-11-08 17:05:58

标签: php

我有这样的字符串

$title = "1 Gal. Black PE Grow Bag (100 per pack)";

$quantity = "10";

我要检查字符串标题是否包含字符串数量。如果不这样做,则删除括号中的文本,如果是,标题将相同。我做了这样的事情,但对我没有好处:

  if (strpos($title, quantity) !== false) {

    }
else{
   $title = preg_replace('/\([\s\S]+?\)/', '', $title);
}

在此示例中,字符串标题中不包含数量。字符串标题中有100,但这是不一样的,但我还应该为此添加条件?

4 个答案:

答案 0 :(得分:0)

您可以使用此正则表达式,因为它是一个很小的简单字符串。

\(.*\)

我还喜欢使用在线正则表达式编辑器,例如https://www.phpliveregex.com/

您可以在https://www.phpliveregex.com/p/pSx

的代码中看到它的实际作用

所以整个代码看起来像这样

if ($quantity === 0){
$title = preg_replace("/\(.*\)/","", $title);
}

这是假设您在商品缺货时使用0。

答案 1 :(得分:0)

我将其设置为工作功能:

std::string whatIneed1, whatIneed2, ignored;
if(ifstream file("/tmp/file.txt"))
{
    for(std::string line; std::getline(file,line);)
    {
        if(line.find("3421",0) != string::npos)
        {
            std::getline(file, ignored);
            file >> whatIneed1;
            std::getline(file, ignored);
            file >> whatIneed2;
            std::getline(file, ignored);
        }
    }
}

这会遍历标题中的每个单词,如果字符串是数字值,则将其转换为int并与数量进行比较。如果数量与值匹配,则创建键范围到爆炸数组的结束键,如果<?php function checkQty($title, $qty) { $words = explode(' ', $title); $endKey = end(array_keys($words)); foreach ($words as $key => $word) { if (strpos($word, '(') !== false) { $word = str_replace('(', '', $word); } if (is_numeric($word)) { $word = (int) $word; } if ((int) $qty === $word) { $toDelete = range($key, $endKey); } } if (!empty($toDelete)) { foreach ($toDelete as $key => $del) { unset($words[$del]); } } return trim(implode(' ', $words)); } $title = "1 Gal. Black PE Grow Bag (100 per pack)"; $quantity = "100"; echo '<pre>'. print_r(checkQty($title, $quantity), 1) .'</pre>'; $quantity = '10'; echo '<pre>'. print_r(checkQty($title, $quantity), 1) .'</pre>'; 包含值,则删除键。

答案 2 :(得分:0)

您实际上非常亲密。您所需要做的只是在代码中留出一个空格,它就会起作用。
请注意strpos中的空间。
这将确保它是10而不是100中的10,因为我们在10之后有一个空格。

$title = "1 Gal. Black PE Grow Bag (100 per pack)";

$quantity= "10";
if (strpos($title, $quantity . " ") !== false) {

}else{
    $title = preg_replace('/\([\s\S]+?\)/', '', $title);
}
echo $title;

我创建了一个演示如何处理10/100的示例。

https://3v4l.org/ZdYFk

答案 3 :(得分:0)

您应该将$quantity转换为正则表达式,然后可以使用单词边界转义序列使其匹配整个单词,而不是单词的一部分。

$quantity = '/\b10\b/';
if (!preg_match($quantity, $title)) {
    $title = preg_replace('/\(.+?\)/s', '', $title);
}

您可以将[\s\S].修饰符一起使用,而不必在正则表达式中使用s。使.匹配任何内容,包括换行符。