匹配直到特定的单词...

时间:2018-09-07 23:02:01

标签: regex

我一生无法解决这个问题...

我正在解析食谱:

Steak and Eggs
Serves 1
150g potatoes, diced
2 tsp olive oil
½ white onion, peeled and chopped
Salt and pepper
200g sirloin steak or rump steak, trimmed of fat
2 large eggs
Reduced carb meal
Family friendly 

这是我的正则表达式的第一部分,它与标题和服务编号相匹配:

(\D*\n*)(?:\nServes )(\d\n)

当结尾处出现类别时,我想停止匹配。我已经计算出其中可能包含“减少”,“家庭”,“快速”等。

然后我尝试这样做:

/(\D*\n*)(?:\nServes )(\d\n)((.*\n)*)(?:Carb|Reduced|Quick|Family)/

但是,如果有两个标签(例如在示例中),则Reg Reg继续到“ Family”(家庭)行将包括“ Reduced Carb餐”。

在此工作2个小时以来,我们将不胜感激!

1 个答案:

答案 0 :(得分:2)

您只需要将非捕获组更改为负前瞻,如下所示:

/(\D*\n*)(?:\nServes )(\d\n)(.*(?:\n(?!Carb|Reduced|Quick|Family).*)*)/

根据@bobble bubble的建议进行编辑,请给他功劳!