我有这样的字符串
$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,但这是不一样的,但我还应该为此添加条件?
答案 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的示例。
答案 3 :(得分:0)
您应该将$quantity
转换为正则表达式,然后可以使用单词边界转义序列使其匹配整个单词,而不是单词的一部分。
$quantity = '/\b10\b/';
if (!preg_match($quantity, $title)) {
$title = preg_replace('/\(.+?\)/s', '', $title);
}
您可以将[\s\S]
与.
修饰符一起使用,而不必在正则表达式中使用s
。使.
匹配任何内容,包括换行符。