2016-12-08 4 views
1

私は文字列の一部を持っています。私はいくつかのシンボルを追加するときに別の文字列と等しいかどうかをチェックする必要があります。しかし、区切り文字の私の使用(私は信じている)は、一致が起こるのを許可していません。preg_match結果が読めない:デリミタの問題?

マイIF文:

if (preg_match("{" . "$words[$counter_words]" . "[<]N}", "$corpus[$counter_corpus]")) 

マイコーパス:

dog 
cat 
3-D 
plant 

私の目標は、「{犬と一緒に "犬" を一致させることですが、次のように私の部分配列である

{3(-)D[<]AN} 
{dog[<]N} 
{4(-)H(')er[<]N} 
{4(-)H[<]A} 
{A battery[<]h} 

[<] N} "([]と{}はデリミタです)。これを補うために、文字列の先頭と最後にデリミタを貼り付けます。 Preg_matchはそれを受け入れますが、2つとも一致しません。

これに対する解決策は何ですか?私は解決策を見いだすことができません。あなたの助けが大変ありがとうございます。

+0

あなたは一致する特別なチャプターをエスケープする必要があります。 –

+0

大丈夫です。その変更は "{"から "/ {/"? 「[N]}」とは何でしょうか? "/ [<]/N /} /"? – drewtoby

+0

それでしょうか?私はそれを見つけることを奨励します –

答えて

0
if (preg_match("{" . $words[$counter_words] . "\\[<\\]N}", $corpus[$counter_corpus])) 

[]は正規表現で特別な意味を持っています。特別な意味を欲しがらない場合は、エスケープする必要があります。\[。しかし、これはPHP文字列の中にあるため、\文字を取得するには、\\と入力する必要があります。

+1

またはpreg_quote()を使用してください –

+0

ありがとうございました!私も同様に逃げなければならないだろうか? – drewtoby

+0

特別な正規表現文字は次のとおりです。 \ + *? [^] $(){} =! < > | : - –