正则表达式匹配包含换行符的可选子字符串的一部分

时间:2012-04-10 19:09:11

标签: regex

这是this questionthis other question (by myself)的变体。

我有一个字符串,我需要使用正则表达式进行解析。字符串类似于:

The XXX is blue.
The XXX is blue,
and the YYY is green.
The XXX is blue,
and the YYY is green.
The XXX is blue.
The XXX is blue.
The XXX is blue.
The XXX is blue.
The XXX is blue,
and the YYY is green.

上面的代码代表一个字符串,包括换行符。请注意逗号后的一些句子后面跟一个可选的子句。在这两部分句子中,YYY“属于”前面的XXX。

我需要匹配所有XXX及其对应的YYY,因此结果应该类似于:

[1][1] XXX
[1][2]
[2][1] XXX
[2][2] YYY
[3][1] XXX
[3][2] YYY
[4][1] XXX
[4][2]
[5][1] XXX
[5][2]
etc.

XXX和YYY可以是任何字符(“。*”)

如何编写与XXX和YYY相匹配的正则表达式? (请记住,YYY可以是可选的。我使用PHP。)

2 个答案:

答案 0 :(得分:2)

这个答案与您链接的第一个问题非常相似:

The (.*?) is blue(?:\.|,\nand the (.*?) is green\.)

看到它正常工作:http://www.rubular.com/r/MONXq83J80

答案 1 :(得分:0)

由于它似乎是所有相同的句子结构,触发器可能只是
在/的。啰嗦是多么愚蠢。

/^The (.*) is.*(?:\n.*the (.*) is)?/m

全局和多线模式(仅限,点不包括换行符)