我有一些数据将是以下之一
Word Number Word Number Word Number Word Word Number Word Word Number Word Number Word Word Number Word Word Number
我想提取单词,直到数字和数字。这是我现在所拥有的(对我来说看起来不错,但我并不完全理解正则表达式)。
preg_match('/([A-Za-z ])([0-9])([A-Za-z ])([0-9])/', $game, $info); print_r($info);
但是,数组是空的。我知道我之前看过^
和+
以及$
,但我不太确定如何将其用于正则表达式。
答案 0 :(得分:1)
为了使字符串与您描述的格式相匹配,您需要
preg_match_all('/^([a-z]+(?:\s+[a-z]+)?)\s+([0-9]+)\s+([a-z]+(?:\s+[a-z]+)?)\s+([0-9]+)$/im', $game, $info);
请参阅regex demo
$re = '~^([a-z]+(?:\s+[a-z]+)?)\s+([0-9]+)\s+([a-z]+(?:\s+[a-z]+)?)\s+([0-9]+)$~im';
$game = "Word 123 Word 456\nWord 1234 Word Word 3456\nWord Word 3455 Word 4566\nWord Word 4434 Word Word 44332";
preg_match_all($re, $game, $info);
print_r($info);
正则表达式的解释:
^
- 字符串开头([a-z]+(?:\s+[a-z]+)?)
- Word Word
或Word
模式\s+
- 一个或多个空格([0-9]+)
- Number
\s+
- 一个或多个空格([a-z]+(?:\s+[a-z]+)?)
- 第3组Word Word
或Word
模式\s+
- 一个或多个空格([0-9]+)
- Number
模式$
- 字符串结尾 /i
修饰符使模式不区分大小写。 /m
修饰符仅用于测试(它使^
和$
匹配行的开头和结尾,而不是整个字符串。)
[a-z]+(?:\s+[a-z]+)?
子模式表示*将一个或多个字母与[a-z]+
匹配,然后匹配一个或多个空格(\s+
)序列的一次或零次出现,后跟一个或多个字母([a-z]+
)。因此,此模式有效地匹配用空格分隔的1或2个单词。