-2

私が求めていることを簡単にするために、最初のコンテンツ文字列を一重引用符で囲んでいます。私のコードにラップされていません。

'{
#    "ERROR" : [
#       "generic error message"
#    ]
# }' =~ {

最初の式で開き括弧をチェックしているだけで、その評価が false であるため、これは true のようです。

4

2 に答える 2

3

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

  1. 疑問符を正規表現の区切り記号として使用しないでください。これらは 1 回だけ一致します。
于 2013-06-04T22:13:56.463 に答える
2

これを試して:

'your string' =~ /\{/

{は正規表現ではないため、示されている構文は有効ではありません。この問題を修正するために、正規表現構文のメタ文字であるため、デフォルトの正規表現文字でラップして get/{/にし、エスケープしました{(結果は になります)。/\{/(正規表現とは、少なくとも何度も繰り返す必要があることをx{a,b}意味します。)xab

于 2013-06-04T19:57:27.940 に答える