Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 匹配到特定的单词。。。_Regex - Fatal编程技术网

Regex 匹配到特定的单词。。。

Regex 匹配到特定的单词。。。,regex,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 这是我的reg ex的第一部分,与标题

我一辈子都搞不懂这个

我正在分析一个配方:

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 
这是我的reg ex的第一部分,与标题和服务编号匹配:

(\D*\n*)(?:\nServes )(\d\n)
我想停止匹配,当它到达最后的类别。我已经计算出这些可能包含“减少的”“家庭”“快速”等

然后,我尝试这样做:

/(\D*\n*)(?:\nServes )(\d\n)((.*\n)*)(?:Carb|Reduced|Quick|Family)/
但是,如果有两个标签,如示例中所示,“减少碳水化合物餐”将包括在内,因为Reg Ex将持续到“家庭”行


任何帮助将不胜感激,因为我已经在这2个小时了

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

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

根据@bobble bubble的建议编辑,给他荣誉

尝试将
(.*\n)*
设置为惰性,并对不包含停止词的情况使用前瞻。@bobblebubble这是可行的,但我建议为前瞻中的词添加单词边界,以避免任何可能的混淆。此外,我的演示中不需要前瞻,因为已经使用了捕获组。不过,我更喜欢@PoulBak的想法,因为它不需要食谱以()结尾。谢谢@bobblebble和Poul。