8

if ステートメントが次のように中括弧なしで 1 行または次の行にあるかどうかを確認したい:

if (blah === blah)
    do something

また:

if (foo === foo) do something

私が現在持っている正規表現は

/\)(?!.*\{)/

しかし、うまくいきません。誰にもアイデアはありますか?

この正規表現によってプルされない唯一の If ステートメントを詳しく説明すると、次のようになります。

if (foo === bar)
{
4

5 に答える 5

8

新しい行は、\n(UNIX)、\r\n(Windows)、\r(適切な尺度として) のようになります。改行を広く一致させる式は次のとおりです。

/\r\n|\r|\n/

式が 1 行にあるかどうかを確認するには、次のようにします。

if( preg_match( '/\r\n|\r|\n/', $string ) ) {
    // on more than one line
    ...
} else {
   // on one line
   ...
}

if ... doこれをさらに展開して、ステートメントの特定の例に適用するには、次のようにします。

if( preg_match( '/if *\([^\)]+\) *(\r\n|\r|\n) *do /', $string ) ) {
    // on more than one line
    ...
} elseif( preg_match( '/if *\([^\)]+\) *do /', $string ) ) {
   // on one line
   ...
}
于 2012-08-24T14:58:03.407 に答える
8

シンプル \r \n(キャリッジリターンと改行)

/[\r\n]/
于 2012-08-24T14:55:43.033 に答える
2

.改行も一致させる必要があります。

/\)(?!.*\{)/s
            ^
    PCRE_DOTALL Modifier

これはsPCRE_DOTALLコメントに書かれているように)修飾子を使用して行われます。

s(PCRE_DOTALL)

この修飾子が設定されている場合、パターン内のドットメタ文字は、改行を含むすべての文字と一致します。これがないと、改行は除外されます。この修飾子は、Perlの/s修飾子と同等です。[^ a]などの負のクラスは、この修飾子の設定に関係なく、常に改行文字と一致します。

于 2012-08-24T15:06:02.117 に答える
0

これを具体的に確認したいので、これをif使用します。

(if[ ()\w=]+)\r\n

に改行がある場合はtrueを返し、ない場合はfalseを返します。if

于 2012-08-24T15:01:09.757 に答える