是否有可能正在搜索像'\ bfunction \ b'这样的字符串的正则表达式,它会显示找到匹配项的行号?
答案 0 :(得分:4)
没有简单的方法可以做到这一点,但是如果你愿意,你可以捕获匹配偏移量(使用preg_match
或preg_match_all
的PREG_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!