1

このコードを使用して、Rails 3.2.13 アプリケーションの投稿からハッシュタグを抽出しています。Ruby 1.9.3 も使用しています。

hasy =/(?:\s|^)(?:#(?!(?:\d+|\w+?_|_\w+?)(?:\s|$)))(\w+)(?=\s|$)/i
tags =post.body.scan(hasy).join(',').split(',').map{|i| "#"+i}

コードは英語の単語に対してはうまく機能していますが、他の言語、特にアラビア語では機能していません。私のサイトはアラビア語のテキストを多く使用しているため、問題を解決するためのアイデアを持っている人はいますか?

4

3 に答える 3

2

POSIX 文字クラスの Regexp ドキュメントを参照することをお勧めします。あなたのニーズに合ったものがいくつかあります。出発点としてお勧め[:graph:]し、必要に応じて絞り込みます。

ドキュメントから:

/[[:alnum:]]/ - Alphabetic and numeric character
/[[:alpha:]]/ - Alphabetic character
/[[:blank:]]/ - Space or tab
/[[:cntrl:]]/ - Control character
/[[:digit:]]/ - Digit
/[[:graph:]]/ - Non-blank character (excludes spaces, control characters, and similar)
/[[:lower:]]/ - Lowercase alphabetical character
/[[:print:]]/ - Like [:graph:], but includes the space character
/[[:punct:]]/ - Punctuation character
/[[:space:]]/ - Whitespace character ([:blank:], newline, carriage return, etc.)
/[[:upper:]]/ - Uppercase alphabetical
/[[:xdigit:]]/ - Digit allowed in a hexadecimal number (i.e., 0-9a-fA-F)

Ruby は、次の非 POSIX 文字クラスもサポートしています。

/[[:word:]]/ - A character in one of the following Unicode general categories Letter, Mark, Number, Connector_Punctuation

あなたの目的のために、次のようなもの:

/\s(#[[:graph:]]+)/ 

は、2 つのサンプル文字列をキャプチャします。前の Rubular リンクに例があります。

于 2013-09-18T14:53:53.990 に答える
2

\wASCII 文字のみに一致します。正規表現で POSIX ブラケット式を使用して、Unicode でアルファベット文字と見なされる非 ASCII 文字にも一致させることができます。

str = "some text before #القاهرة more text here القاهرة #foobar"
str.scan(/#[[:alnum:]]+/)
# => ["#القاهرة", "#foobar"]
于 2013-09-18T14:45:55.707 に答える
0

[^\x20-\x7E]+非ASCII文字を認識します。

于 2013-09-18T14:56:23.333 に答える