Мое мобильное приложение – это как форум на мобильной платформе (WP7, Silverlight, .NET). Одна из особенностей состоит в том, чтобы пометить других пользователей, написав символ «@», а затем имя пользователя.
На стороне сервера, PHP, я разбираю текст так, чтобы он соответствовал тегам и заменял их более читаемой строкой, такой как [tag](display name)|(user id)[/tag]
, но это не важно для нашей цели ,
Чтобы соответствовать тегам, я .... @name, ....
все специальные символы пробелом, поэтому я могу предотвратить это, например .... @name, ....
Затем я удаляю все несколько пробелов, которые могла быть создана предыдущей командой. И, наконец, я разделяю все пробелы, а затем проверяю, начинается ли это слово с символа «@». Это, конечно, не лучший метод, но это то, что мне удалось сделать до сих пор. Там слабый момент, новые строковые символы заставляют мой код терпеть неудачу. Например:
Hello, this is my first line since I go to second and then I tag @Jonh who is a good boy
В таком случае код, который я буду писать ниже, терпит неудачу. Где $resp
– текст для разбора.
if (strpos($resp,'@') !== false) { $new_str = preg_replace('/[^a-zA-Z0-9_ \@]/', ' ', $resp); $new_str = preg_replace('/\s+/', ' ', $new_str); foreach(explode(' ', $new_str) as $word) { if (strpos($word, '@') === 0) { //found my tag! } } } }
Что бы вы посоветовали сделать?