preg_replace regex用于获取配方字符串的权重和搜索项

时间:2015-08-18 03:51:04

标签: php regex search replace preg-replace

我有一组食谱中的项目数据,它们都遵循类似的格式。

2 ripe avocados, halved, stoned, peeled, coarsely chopped
125g tin chickpeas, rinsed, drained  
250g cherry tomatoes, chopped  
2 fresh red birdseye chillies, seeded, finely chopped  
1/2 cup coriander leaves
1 tablespoon lime juice  
2 tablespoons plain flour  
2 teaspoons sumac  
8 (about 800g) white fish fillets (such as bream or whiting)
1 tablespoon vegetable oil

我想要做的是在第一个逗号(,)后忽略所有内容,因为它与我正在寻找的无关。那么数据集将如下所示:

2 ripe avocados
125g tin chickpeas  
250g cherry tomatoes
2 fresh red birdseye chillies
1/2 cup coriander leaves
1 tablespoon lime juice  
2 tablespoons plain flour  
2 teaspoons sumac  
8 (about 800g) white fish fillets (such as bream or whiting)
1 tablespoon vegetable oil

现在删除括号内的任何内容,生成以下数据集:

2 ripe avocados
125g tin chickpeas  
250g cherry tomatoes
2 fresh red birdseye chillies
1/2 cup coriander leaves
1 tablespoon lime juice  
2 tablespoons plain flour  
2 teaspoons sumac  
8 white fish fillets
1 tablespoon vegetable oil

最后,我想删除一些设定的单词,没有一大堆单词,我有一个列表,但在这个例子中,它将是'tin','fresh'和'ripe'这两个词。导致我正在寻找的两件事,即搜索词和音量。如下:

2 avocados
125g chickpeas  
250g cherry tomatoes
2 red birdseye chillies
1/2 cup coriander leaves
1 tablespoon lime juice  
2 tablespoons plain flour  
2 teaspoons sumac  
8 white fish fillets
1 tablespoon vegetable oil

这很可能是正则表达式,目前我正在使用爆炸和其他迭代等尝试实现这一点,因为正则表达式不是我最强的观点,但它不是正确的方法。

非常感谢任何帮助或建议!最终,原因是因为我有一个食品和数量的数据库,我试图比较。

example here

1 个答案:

答案 0 :(得分:1)

替换

,.*$|\([^)]+\)|\b(tin|fresh|ripe)\b

使用''(然后您可能需要将'{2,}'替换为''以处理例如125g tin chickpeas转到125g chickpeas(双倍空格)。

,.*$匹配从逗号到行尾的所有内容,\([^)]+\)替换括号中的匹配(无嵌套括号),tin|fresh|ripe匹配单词'tin','fresh '和'成熟'。 \b匹配'字边界',例如“条纹”中的“成熟”不会被删除。

在PHP中,您可以使用类似preg_replace的内容,例如

$recipe = preg_replace('/,.*$|\([^)]+\)|\b(tin|fresh|ripe)\b/', '', $recipe)
// fix multiple-spaces
$recipe = preg_replace('/ {2,}/', ' ', $recipe)