私が求めていることを簡単にするために、最初のコンテンツ文字列を一重引用符で囲んでいます。私のコードにラップされていません。
'{
# "ERROR" : [
# "generic error message"
# ]
# }' =~ {
最初の式で開き括弧をチェックしているだけで、その評価が false であるため、これは true のようです。
PHP のような言語では、正規表現は引用符で囲まれた単なる通常の文字列です: "/regex/"
. 一方、Perl には正規表現リテラルがあります。これらはコードに直接埋め込まれますが、それでも区切り文字が必要です。
一般に、これは次のようになります。
$string =~ /regex/
スラッシュはデフォルトの区切り文字です。スラッシュが不便な区切り文字である場合は、他の任意の(1)を選択できます —正規表現の前にm
(一致用) を付けます。これらの一致は同等です。
$url =~ /http:\/\///;
$url =~ m/http:\/\///;
$url =~ m{http://};
コンパイル済みの正規表現を変数に格納する場合は、qr//
引用符を使用できます。qr//
正規表現は正規表現と同じ引用規則に従うため (二重エスケープなし)、プレーンな文字列よりもこれらを優先します。
my $url_regex = qr~http://~;
$url =~ $url_regex;
bind 演算子は=~
、右側の引数を正規表現として解釈するために最善を尽くすため、php のような方法で文字列を使用することもできます。
"123\nab12" =~ "\\d\n\\w+"; # double escaping sucks, still matches
しかし、これは に劣り/\d\n\w+/
ます。
したがって、区切り文字をスキップすることはできません。
# "=~" has higher precedence than "+".
# Establishing precedence is the *sole* task of the parens here
"112" =~ (1+2); # fails
"3" =~ (1+2); # matches
"112" =~ /1+2/; # matches
これを試して:
'your string' =~ /\{/
{
は正規表現ではないため、示されている構文は有効ではありません。この問題を修正するために、正規表現構文のメタ文字であるため、デフォルトの正規表現文字でラップして get/{/
にし、エスケープしました{
(結果は になります)。/\{/
(正規表現とは、少なくとも何度も繰り返す必要があることをx{a,b}
意味します。)x
a
b