2012-02-23 9 views
8

非常に単純ですが、#シンボルを正規表現を使って一致させる必要があります。私はハッシュタグ検出器に取り組んでいます。正規表現でポップ(#)記号を一致させる方法(ハッシュタグ用)

私はGoogleとスタックオーバーフローで検索しようとしました。 1つの関連する投稿はhereですが、文字列から#記号を削除したいので、正規表現を使用しませんでした。

正規表現/\b\#\w\w+//\b#\w\w+/を試しても機能しません。#を削除すると、その単語が検出されます。

+3

あなたはそれをエスケープしようとしましたか? ''\#'' – Vitamin

+0

あなたが照合したいサンプルテキストを投稿してください。あなたの問題は#記号ではなく、正規表現内に埋め込むことになります。 – pocketfullofcheese

+0

@Vague:最初の正規表現で投稿したように見えます。 –

答えて

5

あなたは(それはおそらくそれを投げています\bです)、それをエスケープする必要はありません:あなたは区切り文字としてそれを使用しない限り

if (preg_match('/^\w+#(\w+)/', 'abc#def', $matches)) { 
    print_r($matches); 
} 

/* output of $matches: 
Array 
(
    [0] => abc#def 
    [1] => def 
) 
*/ 
+1

私は#abcdefを検出したいのですが、asdasd#は検出しません。 –

+5

しかし、あなたは私が尋ねたことに答えました。 –

10

#は、正規表現で特別な意味を持ちません。ちょうどそれをまっすぐに入れて、それはうまくいくはずです。

\bは単語境界を検出し、#abcでは、単語境界は#の後でabcの前になります。したがって、を使用する必要があります。\bは余分です。#\w\w+が必要です。

+0

なぜ '\ w'が2回必要ですか? '\ w +'は1つ以上を意味しないのでしょうか? –

+0

それはOPのその方法だったので。理想的には、 '\ w {2、}'は「2つ以上」を意味します。 –

+0

'#\ b \ w 'の' \ b'は明らかに余計です。 – Gumbo

0

/\#(\w+)/を使用すると、ハッシュタグとハッシュタグを一致させることができます。/\#\w+/は、ハッシュを含むハッシュタグ全体と一致します。

2

これまでの回答に対するコメントでは、x#xの一致を避けたいと考えています。 その場合、あなたは\bが、\Bを必要としません:

\B#(\w\w+)

(あなたは本当に#後の2または、より多くの単語文字が必要な場合)。

\BはNON-word-boundaryを意味し、#は単語文字ではないため、直前の文字が単語文字でない場合は正確に一致します。

+0

少し遅れましたが、とにかく+1です。 –

関連する問題