0

次のようなコードがあります。

if('hello' == 2 && 'world' !== -1){
  return true;
}

ifステートメントの条件を一致させるのに問題があります。私が考えた最初の正規表現は でしたが/'.*'/、これは一致します:

  1. 'こんにちは'
  2. ' == 2 && '
  3. '世界'

これは私が望んでいたものではありません。一重引用符と内部のテキストのみを一致させたい。

  1. 'こんにちは'
  2. '世界'

どんな体にも考えがありますか?

4

4 に答える 4

0

これを試して

preg_match_all('/\'[^\'\r\n]*\'/m', $subject, $result, PREG_PATTERN_ORDER);
for ($i = 0; $i < count($result[0]); $i++) {
    # Matched text = $result[0][$i];
}

説明

"
'           # Match the character “'” literally
[^'\\r\\n]    # Match a single character NOT present in the list below
               # The character “'”
               # A carriage return character
               # A line feed character
   *           # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
'           # Match the character “'” literally
"
于 2013-03-16T10:22:53.853 に答える
0

あなたの特定の場合のために

\'[a-z]*?\'

コード全体で、引用符に大文字が含まれている場合は、次を使用できます。

\'[a-zA-Z]*?\'

ただし、引用符に特殊文字が含まれている場合は、@ChrisCooperが提案したものを使用できます。必要に応じて、さまざまな答えが可能です。

ノート: '?' 後*は*貪欲ではないので、最後の引用まで検索を試みません。

また、回答を得るためにどの正規表現メソッドを使用するかも重要です。

于 2013-03-16T10:16:14.047 に答える
0

これが私が思いついたものです!

preg_match_all("#'[^'\n\r]*'#", $subject, $matches);
  1. マッチ'
  2. '、改行、改行以外の任意の文字に一致します。
  3. マッチ'

すべてのエスケープがなければ、正規表現であるため、もう少し読みやすいと思います。

于 2013-03-16T12:38:46.233 に答える
0

この 2 つの一致するグループは、引用された値を取得する必要があります。

^.*(\'.*?\').*(\'.*?\').*$
于 2013-03-16T10:05:32.473 に答える