2

「\bfunction\b」のような文字列を検索して、一致が見つかった行番号を表示する正規表現を使用することは可能ですか?

4

5 に答える 5

4

これを行う簡単な方法はありませんが、必要に応じて、一致オフセットを取得し (またはPREG_OFFSET_CAPTUREフラグを使用して)、その位置が文字列内のどの行にあるかを、その前に発生する改行 (たとえば) の数を数えることで判断できます。点。preg_matchpreg_match_all

例えば:

$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アプリケーションで「行」を構成するものによっては、 orを代わりに検索することもできます(ただし、 orなど<br>を説明するために別の正規表現を使用する必要があるため、これはもう少し注意が必要です)。<br /><br style="...">

于 2010-08-24T20:22:17.517 に答える
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
}
于 2010-08-24T20:25:46.090 に答える
1

私が知る限り、そうではありませんが、Linux やその他の Unix ライクなシステムを使用している場合は、フラグを使用して関数のファミリgrepと (ほぼ) 同じ正規表現構文を使用できます。preg_-P

于 2010-08-24T20:16:17.187 に答える
1

いいえ。PREG_OFFSET_CAPTURE フラグを preg_match に渡すと、オフセットがバイト単位で通知されます。ただし、これを行番号に変換する簡単な方法はありません。

于 2010-08-24T20:20:54.213 に答える
0

これは正規表現ではありませんが、機能します:

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

おっと!これはjsではありません!

于 2010-08-24T20:36:59.710 に答える