在PHP中使用正则表达式时是否可以显示行号?

时间:2010-08-24 20:13:32

标签: php regex line-numbers

是否有可能正在搜索像'\ bfunction \ b'这样的字符串的正则表达式,它会显示找到匹配项的行号?

5 个答案:

答案 0 :(得分:4)

没有简单的方法可以做到这一点,但是如果你愿意,你可以捕获匹配偏移量(使用preg_matchpreg_match_allPREG_OFFSET_CAPTURE标志,然后确定哪一行通过计算在该点之前发生的换行符数(例如),该位置在您的字符串中。

例如:

$matches = array();
preg_match('/\bfunction\b/', $string, $matches, PREG_OFFSET_CAPTURE);
list($capture, $offset) = $matches[0];
$line_number = substr_count(substr($string, 0, $offset), "\n") + 1; // 1st line would have 0 \n's, etc.

根据应用程序中“行”的构成,您可能会想要搜索\r\n<br>(但这样会有点棘手,因为您必须使用其他正则表达式来计算<br /><br style="...">等。)

答案 1 :(得分:1)

据我所知,它不是,但如果您使用的是Linux或其他类似Unix的系统,grep会这样做并且可以使用(几乎)与{{1}相同的正则表达式语法具有preg_标志的函数族。

答案 2 :(得分:1)

没有。您可以将PREG_OFFSET_CAPTURE标志传递给preg_match,并以字节为单位告诉您偏移量。但是,没有简单的方法将其转换为行号。

答案 3 :(得分:1)

我会建议一些可能对你有用的东西,

// Get a file into an array.  In this example we'll go through HTTP to get
// the HTML source of a URL.
$lines = file('http://www.example.com/');

// Loop through our array, show HTML source as HTML source; and line numbers too.
foreach ($lines as $line_num => $line) {
    // do the regular expression or sub string search here
}

答案 4 :(得分:0)

这不是正则表达式,但有效:

$offset = strpos($code, 'function');
$lines = explode("\n", substr($code, 0, $offset));
$the_line = count($lines);

哎呀!这不是js!