用正则表达式匹配由单词分隔的子字符串


Match substrings separated by a word with a regular expression

我有这样一句话:"AOrbOrCOrOrOr"。我试着把所有的单词都匹配成"A"b"C";等等。但是,它只是返回"A"b或"cOr";,。。。这是我的图案:/(.*?(?:(?=Or))|(?<!Or).*?)/。我对正则表达式很陌生。

使用正则表达式的另一种选择是使用explode():

$string = 'AOrbOrCOrDOreOrdOr...';
$words = explode('Or', $string);

请注意,如果您有一个常量分隔符,如Or,您可以使用explode(),这比使用正则表达式更快。

只需在正则表达式中使用前瞻性来匹配后面跟着字符串Or、的所有字母

[A-Za-z](?=Or)

演示

如果要匹配后面跟着字符串Or的任何字符,则可以使用.而不是[A-Za-z]

.(?=Or)

演示

您可以使用分解函数:

$text  = "AOrbOrCOrDOreOrdOr...";
$array = explode('Or', $text);

然后你就有了一个包含部分的数组:

array("A", "b", "C", "D", "e",) // ...and so on