如何使用正则表达式从一组复杂的字符串中提取此文本?

时间:2019-03-23 15:38:31

标签: php regex

6 celery sticks, chopped
1 pear
300g/10.6oz strawberries
50g (1.7oz) porridge oats (uncooked)
1 tsp agave
100ml (3.4oz) Whole milk (soy/almond/rice/hemp/oat)
1 scoop of protein powder (approx. 20g/0.7oz)
½ avocado
100g/3.5oz of mushrooms, chopped
1 tsp extra virgin olive oil 

我要提取的内容

芹菜杆,梨,草莓,燕麦粥,龙舌兰,全脂牛奶,蛋白粉,鳄梨,蘑菇,特级初榨橄榄油。

我尝试过的事情

(^.*(\d|oz|\(|tsp|½|of)|(,|\().*$)

我得到的东西

https://www.phpliveregex.com/p/rok

运行 preg_split 标签。

理想情况下,我应该能够进行match [0]并获得名称。

1 个答案:

答案 0 :(得分:2)

您可以在preg_matchpreg_match_all函数中使用此正则表达式:

^[\d½]+\S*\h+(?:\([^)]*\)|tsp|.*? of\b)?\h*([a-z]+(?:\h+[a-z]+)*)

RegEx Demo

RegEx详细信息:

  • ^:开始
  • [\d½]+:匹配1个以上的数字或½
  • \S*:匹配0个或多个非空格字符
  • \h+:匹配1个以上的水平空格
  • (?:\([^)]*\)|tsp|.*? of\b)?\h*:匹配多余的字符
  • ([a-z]+(?:\h+[a-z]+)*):匹配成分名称

PHP Live Demo