2

我在 mysql 字段中有这些数据:

First text text text text
 text text text text
 text text text text text text
 text text text text text text

Second text text text text
 text text text text
 text text text text text text
 text text text text text text

我试图从第一个单词开始匹配直到双换行符。我试过了:

preg_match('/First(.*)\n\n/', $mysqlrow, $m);

这不返回任何行。我也尝试了mands修饰符,它不返回正确的字符串。我也试过\r\n不返回任何东西。

你怎么做到这一点

4

3 回答 3

7

您需要s修饰符,还需要将通配符量词更改为非贪婪:

preg_match('/First(.*?)\n\n/s', $mysqlrow, $m);

s选项将导致.通配符匹配\n,非贪婪将导致*通配符在匹配之前不吃掉\n\n它所遇到的所有内容\n\n

您还可以选择匹配\r以防万一您的数据库中有它:

preg_match('/First(.*?)\r?\n\r?\n/s', $mysqlrow, $m);
于 2012-10-01T05:54:57.170 回答
2

这是您需要的另一个标志。标志“s”允许点捕获换行符。但它会吃掉你的双重'\n'。

你可以试试 :

preg_match('/First(.*?)\n\n/s', $mysqlrow, $m);

与?反转贪婪行为。请注意,可以使用可能更适合您的情况的 split 函数来拆分字符串。

于 2012-10-01T05:55:45.833 回答
0

尽管有像“s”这样的标志,但我遇到了 preg_match() 在多行字符串上不匹配的问题,但是模式不同。原来,我的正则表达式在 [] 内的字符集太长,带有许多不必要的转义序列 (\)。简化后它开始工作。

于 2022-02-14T12:41:25.217 回答