如何使用 preg_match 的群组?
How can I use groups with preg_match?
我有一些数据将是以下之一
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);
然而,数组是空的。我知道我以前见过 ^
和 +
以及 $
,但我不太确定如何将其用于正则表达式。
为了将字符串与您描述的格式相匹配,您需要
preg_match_all('/^([a-z]+(?:\s+[a-z]+)?)\s+([0-9]+)\s+([a-z]+(?:\s+[a-z]+)?)\s+([0-9]+)$/im', $game, $info);
$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
模式的第 1 组
\s+
- 一个或多个空格
([0-9]+)
- Number
的第 2 组
\s+
- 一个或多个空格
([a-z]+(?:\s+[a-z]+)?)
- Word Word
或 Word
模式的第 3 组
\s+
- 一个或多个空格
([0-9]+)
- Number
模式的第 4 组
$
- 字符串结尾
/i
修饰符使模式不区分大小写。 /m
修饰符仅用于测试(它使 ^
和 $
匹配 行 的开始和结束,而不是整个字符串)。
[a-z]+(?:\s+[a-z]+)?
子模式表示*用 [a-z]+
匹配一个或多个字母,然后匹配一个或零个出现的一系列一个或多个空格 (\s+
),后跟一个或更多字母 ([a-z]+
)。因此,此模式有效匹配用空格分隔的 1 或 2 个单词。
我有一些数据将是以下之一
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);
然而,数组是空的。我知道我以前见过 ^
和 +
以及 $
,但我不太确定如何将其用于正则表达式。
为了将字符串与您描述的格式相匹配,您需要
preg_match_all('/^([a-z]+(?:\s+[a-z]+)?)\s+([0-9]+)\s+([a-z]+(?:\s+[a-z]+)?)\s+([0-9]+)$/im', $game, $info);
$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
模式的第 1 组\s+
- 一个或多个空格([0-9]+)
-Number
的第 2 组
\s+
- 一个或多个空格([a-z]+(?:\s+[a-z]+)?)
-Word Word
或Word
模式的第 3 组\s+
- 一个或多个空格([0-9]+)
-Number
模式的第 4 组$
- 字符串结尾
/i
修饰符使模式不区分大小写。 /m
修饰符仅用于测试(它使 ^
和 $
匹配 行 的开始和结束,而不是整个字符串)。
[a-z]+(?:\s+[a-z]+)?
子模式表示*用 [a-z]+
匹配一个或多个字母,然后匹配一个或零个出现的一系列一个或多个空格 (\s+
),后跟一个或更多字母 ([a-z]+
)。因此,此模式有效匹配用空格分隔的 1 或 2 个单词。