2012-04-13 22 views
17

私は正規表現について複数のチュートリアルを読んだことがありますが、それは私の頭の中に固執しません。私はパターンを働かせることはできません。誰かが助けることを願っています。PHPは正規表現で文字列を見つける

私はこの

のように見える特定のパターンを見つけるために必要なPHPの変数($コンテンツ)持っている[ギャラリー:://フォルダ/の/ NAME]私がしたい

を検索:

- starting with "[gallery::" 
- any other character (variable length) 
- ending with "]" 

これまでのところ、PHPで私が持っている:

preg_match('/\[gallery\:/', $content, $matches, PREG_OFFSET_CAPTURE); 

を私は[ギャラリーを見つけることができますが、それはそれです。 残りの名前(/名前///フォルダー/)を見つけることができます。

ご協力いただきましてありがとうございます。 ありがとう!

答えて

26

はそれをキャプチャしてみてください。

preg_match("/\[gallery::(.*?)]/",$content,$m); 

$mは配列です:

0 => [gallery::/name/of/the/folder/] 
1 => /name/of/the/folder/ 
+0

文字列は何か「で始まる」されている場合は、「\\ [ギャラリー」 – AndrewPK

+0

ないだろう、複数の出現箇所([ギャラリーに「^」文字を付加するようにしてください:: /名前/ /の/フォルダ/] [gallery ::/name/of/the/folder /])は、すべての文字にgreedyキャプチャを使用すると問題が発生しますか? –

+0

これは '[gallery ::]'と一致します。 '[gallery ::(。+?)]'に変更します。 – nathanjosiah

2

変更あなたの正規表現私は括弧内のフォルダ/パス部分を入れているので

'/\[gallery::([A-Za-z\/]+)\]/' 

に、キャプチャグループを取得する必要があります。

+0

エスケープする必要のない別の ':'が必要で、 '/'にマッチする必要がある場合は '#' – DaveRandom

+0

'[A-Za-z]'のような別の区切り文字を使う必要があります。しかし、それは "すべての文字"と一致しません - そして、確かにファイル名で許可されているものではありません。 –

+0

@Kolink、括弧の後に+記号を記してください –

0
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) { 
    echo "A match was found."; 
} else { 
    echo "A match was not found."; 
} 
関連する問題