X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=mixi.el;h=0f403de8cc80375c766117ed2f703bd025b785cf;hb=ea7fbcf0f2640f117515ef1695f68135e3ebc591;hp=bd30e3004c20d4efc18a59d388777adc9e332135;hpb=7d674b1fdfa08918676f55353259bcc73e19c007;p=elisp%2Fmixi.git diff --git a/mixi.el b/mixi.el index bd30e30..0f403de 100644 --- a/mixi.el +++ b/mixi.el @@ -1,6 +1,6 @@ ;; mixi.el --- API libraries for accessing to mixi -*- coding: euc-jp -*- -;; Copyright (C) 2005,2006 OHASHI Akira +;; Copyright (C) 2005, 2006, 2007 OHASHI Akira ;; Author: OHASHI Akira ;; Keywords: hypermedia @@ -433,14 +433,15 @@ Increase this value when unexpected error frequently occurs." (defun mixi-logout () (mixi-retrieve "/logout.pl")) +(defconst mixi-login-form "
") + (defmacro with-mixi-retrieve (url &rest body) `(with-current-buffer (get-buffer-create mixi-temp-buffer-name) (when ,url (erase-buffer) (insert (mixi-retrieve ,url)) (goto-char (point-min)) - (when (search-forward - "" nil t) + (when (search-forward mixi-login-form nil t) (mixi-login) (erase-buffer) (insert (mixi-retrieve ,url)))) @@ -455,8 +456,7 @@ Increase this value when unexpected error frequently occurs." (erase-buffer) (insert (mixi-post-form ,url ,fields)) (goto-char (point-min)) - (when (search-forward - "" nil t) + (when (search-forward mixi-login-form nil t) (mixi-login) (erase-buffer) (insert (mixi-post-form ,url ,fields)))) @@ -513,6 +513,29 @@ Increase this value when unexpected error frequently occurs." (buffer-string))) ;; stolen (and modified) from w3m.el +(defconst mixi-entity-alist '(("gt" . ">") + ("lt" . "<") + ("amp" . "&")) + "Alist of html character entities and values.") + +;; stolen (and modified) from w3m.el +(defun mixi-encode-specials-string (str) + "Encode special characters in the string STR." + (let ((pos 0) + (buf)) + (while (string-match "[<>&]" str pos) + (setq buf + (cons ";" + (cons (car (rassoc (match-string 0 str) mixi-entity-alist)) + (cons "&" + (cons (substring str pos (match-beginning 0)) + buf)))) + pos (match-end 0))) + (if buf + (apply 'concat (nreverse (cons (substring str pos) buf))) + str))) + +;; stolen (and modified) from w3m.el (defun mixi-url-encode-string (string) (apply (function concat) (mapcar @@ -954,7 +977,7 @@ Increase this value when unexpected error frequently occurs." (aref (cdr friend) 12)) (defun mixi-friend-profile (friend) - "Return the pforile of FRIEND." + "Return the profile of FRIEND." (unless (mixi-friend-p friend) (signal 'wrong-type-argument (list 'mixi-friend-p friend))) (mixi-realize-friend friend) @@ -1037,9 +1060,9 @@ Increase this value when unexpected error frequently occurs." (when ,friend (concat "&id=" (mixi-friend-id ,friend))))) (defconst mixi-friend-list-id-regexp - "\\(.+\\)¤µ¤ó([0-9]+)
") + "\\(.+\\)¤µ¤ó([0-9]+)") ;;;###autoload (defun mixi-get-friends (&rest friend-or-range) @@ -1157,39 +1180,41 @@ Increase this value when unexpected error frequently occurs." "&owner_id=" (mixi-friend-id (mixi-diary-owner ,diary)))) (defconst mixi-diary-closed-regexp - "ͧ¿Í\\(¤Îͧ¿Í\\)?¤Þ¤Ç¸ø³«¤Î¤¿¤áÆɤळ¤È¤¬½ÐÍè¤Þ¤»¤ó¡£") + "ͧ¿Í\\(¤Îͧ¿Í\\)?¤Þ¤Ç¸ø³«¤Î¤¿¤áÆɤळ¤È¤¬½ÐÍè¤Þ¤»¤ó¡£") (defconst mixi-diary-owner-nick-regexp - "\\(.+?\\)\\(¤µ¤ó\\)?¤ÎÆüµ­") + "\\(.+?\\)\\(¤µ¤ó\\)?¤ÎÆüµ­") (defconst mixi-diary-time-regexp - "\\([0-9]+\\)ǯ\\([0-9]+\\)·î\\([0-9]+\\)Æü\\(
\\|
\\)\\([0-9]+\\):\\([0-9]+\\)") + "\\([0-9]+\\)ǯ\\([0-9]+\\)·î\\([0-9]+\\)Æü\\([0-9]+\\):\\([0-9]+\\)") (defconst mixi-diary-title-regexp - " \\([^<]+\\)") + " \\([^<]+\\)") (defconst mixi-diary-content-regexp - "\\(\\(.\\|\n\\)*?\\)") + "\\(\\(.\\|\r?\n\\)*?\\)\\(\t\\|\r?\n\\)
") (defun mixi-realize-diary (diary &optional page) "Realize a DIARY." ;; FIXME: Check a expiration of cache? (unless (mixi-object-realized-p diary) (with-mixi-retrieve (or page (mixi-diary-page diary)) - (unless (re-search-forward mixi-diary-closed-regexp nil t) - (if (re-search-forward mixi-diary-owner-nick-regexp nil t) - (mixi-friend-set-nick (mixi-diary-owner diary) (match-string 1)) - (mixi-realization-error 'cannot-find-owner-nick diary)) - (if (re-search-forward mixi-diary-time-regexp nil t) - (mixi-diary-set-time - diary (encode-time 0 (string-to-number (match-string 10)) - (string-to-number (match-string 9)) - (string-to-number (match-string 7)) - (string-to-number (match-string 6)) - (string-to-number (match-string 5)))) - (mixi-realization-error 'cannot-find-time diary)) - (if (re-search-forward mixi-diary-title-regexp nil t) - (mixi-diary-set-title diary (match-string 2)) - (mixi-realization-error 'cannot-find-title diary)) - (if (re-search-forward mixi-diary-content-regexp nil t) - (mixi-diary-set-content diary (match-string 2)) - (mixi-realization-error 'cannot-find-content diary)))) + (let ((case-fold-search t)) + (unless (re-search-forward mixi-diary-closed-regexp nil t) + (if (re-search-forward mixi-diary-owner-nick-regexp nil t) + (mixi-friend-set-nick (mixi-diary-owner diary) + (match-string 1)) + (mixi-realization-error 'cannot-find-owner-nick diary)) + (if (re-search-forward mixi-diary-time-regexp nil t) + (mixi-diary-set-time + diary (encode-time 0 (string-to-number (match-string 7)) + (string-to-number (match-string 6)) + (string-to-number (match-string 4)) + (string-to-number (match-string 3)) + (string-to-number (match-string 2)))) + (mixi-realization-error 'cannot-find-time diary)) + (if (re-search-forward mixi-diary-title-regexp nil t) + (mixi-diary-set-title diary (match-string 1)) + (mixi-realization-error 'cannot-find-title diary)) + (if (re-search-forward mixi-diary-content-regexp nil t) + (mixi-diary-set-content diary (match-string 1)) + (mixi-realization-error 'cannot-find-content diary))))) (mixi-object-touch diary))) (defun mixi-diary-owner (diary) @@ -1263,7 +1288,7 @@ Increase this value when unexpected error frequently occurs." (defconst mixi-diary-list-regexp " -\\([0-9]+\\)·î\\([0-9]+\\)Æü
\\([0-9]+\\):\\([0-9]+\\)
\\(
\\|\\) +\\([0-9]+\\)ǯ
\\([0-9]+\\)·î\\([0-9]+\\)Æü
\\([0-9]+\\):\\([0-9]+\\)
\\(
\\|\\)  
\\(.*\\)") ;;;###autoload @@ -1281,21 +1306,16 @@ Increase this value when unexpected error frequently occurs." (signal 'wrong-type-argument (list 'mixi-friend-p friend))) (let ((items (mixi-get-matched-items (mixi-diary-list-page friend) mixi-diary-list-regexp - range)) - (year (nth 5 (decode-time (current-time)))) - (month (nth 4 (decode-time (current-time))))) + range))) (mapcar (lambda (item) - (let ((month-of-item (string-to-number (nth 0 item)))) - (when (> month-of-item month) - (decf year)) - (setq month month-of-item) - (mixi-make-diary friend (nth 5 item) nil - (encode-time - 0 (string-to-number (nth 3 item)) - (string-to-number (nth 2 item)) - (string-to-number (nth 1 item)) - month year) - (nth 6 item)))) + (mixi-make-diary friend (nth 6 item) nil + (encode-time + 0 (string-to-number (nth 4 item)) + (string-to-number (nth 3 item)) + (string-to-number (nth 2 item)) + (string-to-number (nth 1 item)) + (string-to-number (nth 0 item))) + (nth 7 item))) items)))) (defmacro mixi-new-diary-list-page () @@ -1340,7 +1360,7 @@ Increase this value when unexpected error frequently occurs." ËÜ  Ê¸ -\\(.*\\) +\\(.*\\) @@ -1378,7 +1398,7 @@ Increase this value when unexpected error frequently occurs." `(concat "/add_diary.pl")) (defconst mixi-post-key-regexp - "") + "\\(ºîÀ®\\|½ñ¤­¹þ¤ß\\)¤¬´°Î»¤·¤Þ¤·¤¿¡£È¿±Ç¤Ë»þ´Ö¤¬¤«¤«¤ë¤³¤È¤¬¤¢¤ê¤Þ¤¹¤Î¤Ç¡¢É½¼¨¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¾¯¡¹¤ªÂÔ¤Á¤¯¤À¤µ¤¤¡£") @@ -1438,71 +1458,83 @@ Increase this value when unexpected error frequently occurs." (defconst mixi-community-nodata-regexp "^¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤»¤ó") (defconst mixi-community-name-regexp - "\\(.*\\)") + "\\(.*\\)") (defconst mixi-community-birthday-regexp - "³«ÀßÆü -\\([0-9]+\\)ǯ\\([0-9]+\\)·î\\([0-9]+\\)Æü") + "³«ÀßÆü +\\([0-9]+\\)ǯ\\([0-9]+\\)·î\\([0-9]+\\)Æü") ;; FIXME: Care when the owner has seceded. (defconst mixi-community-owner-regexp - "´ÉÍý¿Í - + "´ÉÍý¿Í + -") + " +") (defconst mixi-community-members-regexp - " -") + " +") (defconst mixi-community-open-level-regexp - " -") + " +") (defconst mixi-community-authority-regexp - " -") + " +") (defconst mixi-community-description-regexp - "") + "") (defun mixi-realize-community (community) "Realize a COMMUNITY." ;; FIXME: Check a expiration of cache? (unless (mixi-object-realized-p community) (with-mixi-retrieve (mixi-community-page community) - (if (re-search-forward mixi-community-nodata-regexp nil t) - ;; FIXME: Set all members? - (mixi-community-set-name community "¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤»¤ó") - (if (re-search-forward mixi-community-name-regexp nil t) - (mixi-community-set-name community (match-string 1)) - (mixi-realization-error 'cannot-find-name community)) - (if (re-search-forward mixi-community-birthday-regexp nil t) - (mixi-community-set-birthday - community (encode-time 0 0 0 (string-to-number (match-string 3)) - (string-to-number (match-string 2)) - (string-to-number (match-string 1)))) - (mixi-realization-error 'cannot-find-birthday community)) - (if (re-search-forward mixi-community-owner-regexp nil t) - (if (string= (match-string 1) "home.pl") - (mixi-community-set-owner community (mixi-make-me)) - (mixi-community-set-owner community - (mixi-make-friend (match-string 2) - (match-string 3)))) - (mixi-realization-error 'cannot-find-owner community)) - (if (re-search-forward mixi-community-category-regexp nil t) - (mixi-community-set-category community (match-string 1)) - (mixi-realization-error 'cannot-find-category community)) - (if (re-search-forward mixi-community-members-regexp nil t) - (mixi-community-set-members community - (string-to-number (match-string 1))) - (mixi-realization-error 'cannot-find-members community)) - (if (re-search-forward mixi-community-open-level-regexp nil t) - (mixi-community-set-open-level community (match-string 1)) - (mixi-realization-error 'cannot-find-open-level community)) - (if (re-search-forward mixi-community-authority-regexp nil t) - (mixi-community-set-authority community (match-string 1)) - (mixi-realization-error 'cannot-find-authority community)) - (if (re-search-forward mixi-community-description-regexp nil t) - (mixi-community-set-description community (match-string 1)) - (mixi-realization-error 'cannot-find-description community)))) + (let ((case-fold-search t)) + (if (re-search-forward mixi-community-nodata-regexp nil t) + ;; FIXME: Set all members? + (mixi-community-set-name community "¥Ç¡¼¥¿¤¬¤¢¤ê¤Þ¤»¤ó") + (if (re-search-forward mixi-community-name-regexp nil t) + (mixi-community-set-name community (match-string 1)) + (mixi-realization-error 'cannot-find-name community)) + (if (re-search-forward mixi-community-birthday-regexp nil t) + (mixi-community-set-birthday + community (encode-time 0 0 0 + (string-to-number (match-string 3)) + (string-to-number (match-string 2)) + (string-to-number (match-string 1)))) + (mixi-realization-error 'cannot-find-birthday community)) + (if (re-search-forward mixi-community-owner-regexp nil t) + (if (string= (match-string 1) "home.pl") + (mixi-community-set-owner community (mixi-make-me)) + (mixi-community-set-owner community (mixi-make-friend + (match-string 2) + (match-string 3)))) + (mixi-realization-error 'cannot-find-owner community)) + (if (re-search-forward mixi-community-category-regexp nil t) + (mixi-community-set-category community (match-string 1)) + (mixi-realization-error 'cannot-find-category community)) + (if (re-search-forward mixi-community-members-regexp nil t) + (mixi-community-set-members community + (string-to-number (match-string 1))) + (mixi-realization-error 'cannot-find-members community)) + (if (re-search-forward mixi-community-open-level-regexp nil t) + (mixi-community-set-open-level community (match-string 1)) + (mixi-realization-error 'cannot-find-open-level community)) + (if (re-search-forward mixi-community-authority-regexp nil t) + (mixi-community-set-authority community (match-string 1)) + (mixi-realization-error 'cannot-find-authority community)) + (if (re-search-forward mixi-community-description-regexp nil t) + (mixi-community-set-description community (match-string 1)) + (mixi-realization-error 'cannot-find-description community))))) (mixi-object-touch community))) (defun mixi-community-id (community) @@ -1623,9 +1655,9 @@ Increase this value when unexpected error frequently occurs." (when ,friend (concat "&id=" (mixi-friend-id ,friend))))) (defconst mixi-community-list-id-regexp - "\\(.+\\)([0-9]+)") + "
\\(.*\\)") (defconst mixi-community-category-regexp - "¥«¥Æ¥´¥ê\\([^<]+\\)¥«¥Æ¥´¥ê +\\(.+\\) +¥á¥ó¥Ð¡¼¿ô\\([0-9]+\\)¿Í
¥á¥ó¥Ð¡¼¿ô +\\([0-9]+\\)¿Í +»²²Ã¾ò·ï¤È
¸ø³«¥ì¥Ù¥ë
\\(.+\\)
»²²Ã¾ò·ï¤È
¸ø³«¥ì¥Ù¥ë
+\\(.+\\) +¥È¥Ô¥Ã¥¯ºîÀ®¤Î¸¢¸Â\\(.+\\)
¥È¥Ô¥Ã¥¯ºîÀ®¤Î¸¢¸Â +\\(.+\\) + + +\\(.+\\)\\(.+\\)\\(.+\\)([0-9]+)") ;;;###autoload (defun mixi-get-communities (&rest friend-or-range) @@ -1712,7 +1744,7 @@ Increase this value when unexpected error frequently occurs." (defconst mixi-topic-owner-regexp "  \\(.*?\\)\\(¤µ¤ó\\)?") (defconst mixi-topic-content-regexp - "
\\(\n\\)*
\\(.+\\)
") + "") + "") (defconst mixi-event-time-regexp - "") +?\\([0-9]+\\):\\([0-9]+\\) +") (defconst mixi-event-title-regexp - "") + "") (defconst mixi-event-owner-regexp - " - +") (defconst mixi-event-place-regexp - " - +") (defconst mixi-event-detail-regexp - " -") + " + -?") + " +?") (defconst mixi-event-members-regexp - " - +
\\(\\(.\\|\r?\n\\)*?\\)
") (defun mixi-realize-topic (topic &optional page) "Realize a TOPIC." @@ -1739,7 +1771,7 @@ Increase this value when unexpected error frequently occurs." (match-string 2))) (mixi-realization-error 'cannot-find-owner topic)) (if (re-search-forward mixi-topic-content-regexp nil t) - (mixi-topic-set-content topic (match-string 2)) + (mixi-topic-set-content topic (match-string 1)) (mixi-realization-error 'cannot-find-content topic))) (mixi-object-touch topic))) @@ -1880,39 +1912,41 @@ Increase this value when unexpected error frequently occurs." "&comm_id=" (mixi-community-id (mixi-event-community ,event)))) (defconst mixi-event-community-regexp - "
\\[\\(.+\\)\\] ¥¤¥Ù¥ó¥È\\[\\(.+\\)\\] ¥¤¥Ù¥ó¥È + " ?\\([0-9]+\\)ǯ\\([0-9]+\\)·î\\([0-9]+\\)Æü
-?\\([0-9]+\\):\\([0-9]+\\)
 \\([^<]+\\) \\([^<]+\\) \\(.*\\)") + " \\(.*\\)") (defconst mixi-event-owner-seceded-regexp - " \\((mixi Âà²ñºÑ)\\)") + " \\((mixi Âà²ñºÑ)\\)") (defconst mixi-event-date-regexp - "³«ºÅÆü»þ + "³«ºÅÆü»þ  \\(.+\\) ³«ºÅ¾ì½ê + "³«ºÅ¾ì½ê  \\(.+\\) ¾ÜºÙ
\\(.+\\)
¾ÜºÙ +
\\(.+\\)
") (defconst mixi-event-limit-regexp - "
Ê罸´ü¸Â \\([0-9]+\\)ǯ\\([0-9]+\\)·î\\([0-9]+\\)ÆüÊ罸´ü¸Â \\([0-9]+\\)ǯ\\([0-9]+\\)·î\\([0-9]+\\)Æü»²²Ã¼Ô + "»²²Ã¼Ô ? -? +?
?") @@ -1922,45 +1956,46 @@ Increase this value when unexpected error frequently occurs." ;; FIXME: Check a expiration of cache? (unless (mixi-object-realized-p event) (with-mixi-retrieve (or page (mixi-event-page event)) - (if (re-search-forward mixi-event-community-regexp nil t) - (mixi-community-set-name (mixi-event-community event) - (match-string 1)) - (mixi-realization-error 'cannot-find-community event)) - (if (re-search-forward mixi-event-time-regexp nil t) - (mixi-event-set-time - event (encode-time 0 (string-to-number (match-string 8)) - (string-to-number (match-string 7)) - (string-to-number (match-string 6)) - (string-to-number (match-string 5)) - (string-to-number (match-string 4)))) - (mixi-realization-error 'cannot-find-time event)) - (if (re-search-forward mixi-event-title-regexp nil t) - (mixi-event-set-title event (match-string 2)) - (mixi-realization-error 'cannot-find-title event)) - (if (re-search-forward mixi-event-owner-regexp nil t) - (mixi-event-set-owner event (mixi-make-friend (match-string 2) - (match-string 3))) - (if (re-search-forward mixi-event-owner-seceded-regexp nil t) - (mixi-event-set-owner event - (mixi-make-friend nil (match-string 2))) - (mixi-realization-error 'cannot-find-owner event))) - (if (re-search-forward mixi-event-date-regexp nil t) - (mixi-event-set-date event (match-string 6)) - (mixi-realization-error 'cannot-find-date event)) - (if (re-search-forward mixi-event-place-regexp nil t) - (mixi-event-set-place event (match-string 6)) - (mixi-realization-error 'cannot-find-place event)) - (if (re-search-forward mixi-event-detail-regexp nil t) - (mixi-event-set-detail event (match-string 6)) - (mixi-realization-error 'cannot-find-detail event)) - (when (re-search-forward mixi-event-limit-regexp nil t) - (mixi-event-set-limit - event (encode-time 0 0 0 (string-to-number (match-string 8)) - (string-to-number (match-string 7)) - (string-to-number (match-string 6))))) - (if (re-search-forward mixi-event-members-regexp nil t) - (mixi-event-set-members event (match-string 6)) - (mixi-realization-error 'cannot-find-members event))) + (let ((case-fold-search t)) + (if (re-search-forward mixi-event-community-regexp nil t) + (mixi-community-set-name (mixi-event-community event) + (match-string 1)) + (mixi-realization-error 'cannot-find-community event)) + (if (re-search-forward mixi-event-time-regexp nil t) + (mixi-event-set-time + event (encode-time 0 (string-to-number (match-string 5)) + (string-to-number (match-string 4)) + (string-to-number (match-string 3)) + (string-to-number (match-string 2)) + (string-to-number (match-string 1)))) + (mixi-realization-error 'cannot-find-time event)) + (if (re-search-forward mixi-event-title-regexp nil t) + (mixi-event-set-title event (match-string 2)) + (mixi-realization-error 'cannot-find-title event)) + (if (re-search-forward mixi-event-owner-regexp nil t) + (mixi-event-set-owner event (mixi-make-friend (match-string 1) + (match-string 2))) + (if (re-search-forward mixi-event-owner-seceded-regexp nil t) + (mixi-event-set-owner event + (mixi-make-friend nil (match-string 1))) + (mixi-realization-error 'cannot-find-owner event))) + (if (re-search-forward mixi-event-date-regexp nil t) + (mixi-event-set-date event (match-string 1)) + (mixi-realization-error 'cannot-find-date event)) + (if (re-search-forward mixi-event-place-regexp nil t) + (mixi-event-set-place event (match-string 1)) + (mixi-realization-error 'cannot-find-place event)) + (if (re-search-forward mixi-event-detail-regexp nil t) + (mixi-event-set-detail event (match-string 1)) + (mixi-realization-error 'cannot-find-detail event)) + (when (re-search-forward mixi-event-limit-regexp nil t) + (mixi-event-set-limit + event (encode-time 0 0 0 (string-to-number (match-string 3)) + (string-to-number (match-string 2)) + (string-to-number (match-string 1))))) + (if (re-search-forward mixi-event-members-regexp nil t) + (mixi-event-set-members event (match-string 1)) + (mixi-realization-error 'cannot-find-members event)))) (mixi-object-touch event))) (defun mixi-event-community (event) @@ -2256,7 +2291,7 @@ Increase this value when unexpected error frequently occurs." ;; FIXME: Split regexp to time, owner(id and nick) and contents. (defconst mixi-diary-comment-list-regexp -"") @@ -2490,7 +2529,7 @@ Increase this value when unexpected error frequently occurs." (defconst mixi-message-title-regexp "·ï\\(¡¡\\| \\)̾ : \\(.*\\)\n?") (defconst mixi-message-content-regexp - "") + "") (defun mixi-realize-message (message) "Realize a MESSAGE." @@ -2768,7 +2807,7 @@ Increase this value when unexpected error frequently occurs." (defconst mixi-news-finished-regexp - "") + "¿½¤·Ìõ¤´¤¶¤¤¤Þ¤»¤ó¤¬¡¢¤³¤Î¥Ë¥å¡¼¥¹¤Ï·ÇºÜ¤¬½ªÎ»¤·¤¿¤«¡¢URL¤¬´Ö°ã¤Ã¤Æ¤¤¤¤¤ë¤¿¤á¤´Í÷¤¤¤¿¤À¤±¤Þ¤»¤ó¡£") (defconst mixi-news-title-regexp "")
 \\(.+\\) + " \\([0-9]+\\)ǯ\\([0-9]+\\)·î\\([0-9]+\\)Æü
\\([0-9]+\\):\\([0-9]+\\)\\(
\\|\\) @@ -2279,7 +2314,7 @@ Increase this value when unexpected error frequently occurs."
-
+ \\(.+\\)
") @@ -2310,9 +2345,8 @@ Increase this value when unexpected error frequently occurs."
-
- -\\(.+\\) + +\\(\\(.\\|\r?\n\\)*?\\)
@@ -2343,7 +2377,12 @@ Increase this value when unexpected error frequently occurs."
- + + +
\\(.+\\)
+ +\\(.+\\) +
\\(.*\\)
\\(.*\\)
¿½¤·Ìõ¤´¤¶¤¤¤Þ¤»¤ó¤¬¡¢¤³¤Î¥Ë¥å¡¼¥¹¤Ï·ÇºÜ½ªÎ»¤·¤Þ¤·¤¿¡£\\(.+\\)\\( \\)?