次のようなコードがあります。
if('hello' == 2 && 'world' !== -1){
return true;
}
if
ステートメントの条件を一致させるのに問題があります。私が考えた最初の正規表現は でしたが/'.*'/
、これは一致します:
- 'こんにちは'
- ' == 2 && '
- '世界'
これは私が望んでいたものではありません。一重引用符と内部のテキストのみを一致させたい。
- 'こんにちは'
- '世界'
どんな体にも考えがありますか?
次のようなコードがあります。
if('hello' == 2 && 'world' !== -1){
return true;
}
if
ステートメントの条件を一致させるのに問題があります。私が考えた最初の正規表現は でしたが/'.*'/
、これは一致します:
これは私が望んでいたものではありません。一重引用符と内部のテキストのみを一致させたい。
どんな体にも考えがありますか?
これを試して
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
"
あなたの特定の場合のために
\'[a-z]*?\'
コード全体で、引用符に大文字が含まれている場合は、次を使用できます。
\'[a-zA-Z]*?\'
ただし、引用符に特殊文字が含まれている場合は、@ChrisCooperが提案したものを使用できます。必要に応じて、さまざまな答えが可能です。
ノート: '?' 後*は*貪欲ではないので、最後の引用まで検索を試みません。
また、回答を得るためにどの正規表現メソッドを使用するかも重要です。
これが私が思いついたものです!
preg_match_all("#'[^'\n\r]*'#", $subject, $matches);
'
。'
、改行、改行以外の任意の文字に一致します。'
。すべてのエスケープがなければ、正規表現であるため、もう少し読みやすいと思います。
この 2 つの一致するグループは、引用された値を取得する必要があります。
^.*(\'.*?\').*(\'.*?\').*$