banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Sửa link dạng BB Code thành dạng HTML  XML
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 12/12/2010 23:31:20 (+0700) | #1 | 226948
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Do anh conmale disable link, nên hàng loạt topic chứa link kiểu:

[ url=/hvaonline/posts/list/136.html ]Sử dụng GRUB[ /url ]

(có thể có hoặc không có ngoặc kép bao quanh link)

sẽ chỉ hiện thị mỗi đoạn text: /hvaonline/posts/list/136.html. Giờ mình muốn sửa thành:

<a href="/hvaonline/posts/list/136.html" target="_blank">Sử dụng GRUB</a>

Bạn nào giúp mình với smilie.
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 13/12/2010 01:27:03 (+0700) | #2 | 226951
[Avatar]
conmale
Administrator

Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
[Profile] [PM]

quanta wrote:
Do anh conmale disable link, nên hàng loạt topic chứa link kiểu:

[ url=/hvaonline/posts/list/136.html ]Sử dụng GRUB[ /url ]

(có thể có hoặc không có ngoặc kép bao quanh link)

sẽ chỉ hiện thị mỗi đoạn text: /hvaonline/posts/list/136.html. Giờ mình muốn sửa thành:

<a href="/hvaonline/posts/list/136.html" target="_blank">Sử dụng GRUB</a>

Bạn nào giúp mình với smilie


Lưu ý, chỉ có moderators và chỉ có một vài phân mục cho phép post dạng html.
What bringing us together is stronger than what pulling us apart.
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 13/12/2010 08:41:44 (+0700) | #3 | 226961
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

conmale wrote:

Lưu ý, chỉ có moderators và chỉ có một vài phân mục cho phép post dạng html. 

OK anh. Cái này em đang muốn thảo luận trên phương diện kỹ thuật: sed, awk, tr, Perl, ... thôi anh à.
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 13/12/2010 13:35:46 (+0700) | #4 | 226977
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]

quanta wrote:

conmale wrote:

Lưu ý, chỉ có moderators và chỉ có một vài phân mục cho phép post dạng html. 

OK anh. Cái này em đang muốn thảo luận trên phương diện kỹ thuật: sed, awk, tr, Perl, ... thôi anh à. 


Code:
echo "[ url=/hvaonline/posts/list/136.html ]GRUB[ /url ]"|sed 's|\(\[[[:space:]]*url=\([^[:space:]]*\)[[:space:]]]\([^[\[]*\).*\)|<a href="\2">\3</a>|g'
<a href="/hvaonline/posts/list/136.html">GRUB</a>

lằng ngoằng mãi mới ra đc cái này smilie
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 13/12/2010 14:32:03 (+0700) | #5 | 226978
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Hello secmask,

- Cái space anh thêm vào trước và sau url, /url chỉ để cho nó không bị biến thành link thôi, chứ thật ra là không có.
- Ngoài ra, cần chú ý đến dấu ngoặc kép bao quanh link:

[ url="/hvaonline/posts/list/136.html" ]Sử dụng GRUB[ /url ]

target="_blank" nữa.

Mời các bạn tiếp tục tham gia.

PS: delimiter là pipe thay vì forward slash nhìn lạ ghê.
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 13/12/2010 15:19:52 (+0700) | #6 | 226979
[Avatar]
WinDak
Researcher

Joined: 27/01/2002 11:15:00
Messages: 223
Offline
[Profile] [PM]
Đây là bằng perl, mình chỉ nghịch chút nên chưa cẩn thận lắm, (giả sử cái bbcode là correct và giả sử cái link trong url="" là link gồm a-zA-Z0-9\/. còn nếu có cái khác thì cứ tiện nghi thêm vào thôi)

Code:
perl -e 'shift=~/\[url=\"*([\w\.\/\:]+)\"*\](.+)\[\/url\]/; print "\<a href=\"$1\" target=\"_blank\"\>$2\<\/a\>\n";'  "[url=/hvaonline/posts/list/136.html]Sử dụng GRUB[/url]"


Code:
perl -e 'shift=~/\[url=\"*([\w\.\/\:]+)\"*\](.+)\[\/url\]/; print "\<a href=\"$1\" target=\"_blank\"\>$2\<\/a\>\n";'  '[url="/hvaonline/posts/list/136.html"]Sử dụng GRUB[/url]'


Code:
<a href="/hvaonline/posts/list/136.html" target="_blank">Sử dụng GRUB</a>
-- w~ --
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 13/12/2010 18:29:41 (+0700) | #7 | 226986
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
Các bạn giúp mình tìm xem sai ở đâu mà khi có ngoặc kép bao quanh link thì lệnh sau trả về kết quả không đúng (thừa ra một dấu ngoặc kép):

Code:
$ cat input 
[url="/hvaonline/posts/list/136.html"]GRUB[/url]
[url=/hvaonline/posts/list/136.html]GRUB[/url]

Code:
$ sed 's/\[url="\?\(.*\)"\?\]\(.*\)\[\/url\]/<a href="\1" target="_blank">\2<\/a>/' input


<a href="/hvaonline/posts/list/136.html"" target="_blank">GRUB</a>
<a href="/hvaonline/posts/list/136.html" target="_blank">GRUB</a>
 
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 13/12/2010 18:33:51 (+0700) | #8 | 226987
[Avatar]
secmask
Elite Member

[Minus]    0    [Plus]
Joined: 29/10/2004 13:52:24
Messages: 553
Location: graveyard
Offline
[Profile] [PM] [WWW]
Code:
$ echo "[url=/hvaonline/posts/list/136.html]Su dung GRUB[/url]"|sed 's|\(\[url="\{0,1\}\([^]^"]*\)"\{0,1\}]\([^[]*\)\[/url]\)|<a href="\2" target="_blank">\3</a>|g'
<a href="/hvaonline/posts/list/136.html" target="_blank">Su dung GRUB</a>

ok, em mod lại thế này.
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 13/12/2010 19:30:56 (+0700) | #9 | 226991
[Avatar]
WinDak
Researcher

Joined: 27/01/2002 11:15:00
Messages: 223
Offline
[Profile] [PM]

quanta wrote:
Các bạn giúp mình tìm xem sai ở đâu mà khi có ngoặc kép bao quanh link thì lệnh sau trả về kết quả không đúng (thừa ra một dấu ngoặc kép):

Code:
$ cat input 
[url="/hvaonline/posts/list/136.html"]GRUB[/url]
[url=/hvaonline/posts/list/136.html]GRUB[/url]

Code:
$ sed 's/\[url="\?\(.*\)"\?\]\(.*\)\[\/url\]/<a href="\1" target="_blank">\2<\/a>/' input


<a href="/hvaonline/posts/list/136.html"" target="_blank">GRUB</a>
<a href="/hvaonline/posts/list/136.html" target="_blank">GRUB</a>
 
 


Có lẽ tại phần lấy tham số match đầu tiên ra quanta xài (.*) cho nên nó sẽ quét đến cuối string lấy tất cả vào ( bao gồm cả `"` ). thử giới hạn lại thành ([\w\/\:\.]*) hi vọng sẽ ra kết quả đúng
-- w~ --
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 14/12/2010 09:02:43 (+0700) | #10 | 227002
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

WinDak wrote:

Có lẽ tại phần lấy tham số match đầu tiên ra quanta xài (.*) cho nên nó sẽ quét đến cuối string lấy tất cả vào ( bao gồm cả `"` ).
 

OK, cảm ơn WinDak. Mình nhớ là có đọc cái rule "leftmost match, longest possible string, zero also matches." này rồi, thế mà lại quên mất.

WinDak wrote:

thử giới hạn lại thành ([\w\/\:\.]*) hi vọng sẽ ra kết quả đúng 

Cái regex này cũng chưa đúng bạn à. Thôi thì dùng cách của secmask cho tổng quát, hoặc thế này ([a-z0-9:\/\.#]*) cũng được.
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 14/12/2010 09:14:23 (+0700) | #11 | 227003
[Avatar]
WinDak
Researcher

Joined: 27/01/2002 11:15:00
Messages: 223
Offline
[Profile] [PM]

quanta wrote:

WinDak wrote:

Có lẽ tại phần lấy tham số match đầu tiên ra quanta xài (.*) cho nên nó sẽ quét đến cuối string lấy tất cả vào ( bao gồm cả `"` ).
 

OK, cảm ơn WinDak. Mình nhớ là có đọc cái rule "leftmost match, longest possible string, zero also matches." này rồi, thế mà lại quên mất.

WinDak wrote:

thử giới hạn lại thành ([\w\/\:\.]*) hi vọng sẽ ra kết quả đúng 

Cái regex này cũng chưa đúng bạn à. Thôi thì dùng cách của secmask cho tổng quát, hoặc thế này ([a-z0-9:\/\.#]*) cũng được. 


cái đó sao lại tổng quát smilie smilie a-z0-9 làm sao = \w ? ( \w còn gồm cả letters, digits, và underscores)

đúng là phải thêm # nữa, nhưng vẫn chỉ là assume là gồm những cái này thôi ( cho là bbcode đã tự check ), chứ thật sự url mà muốn match chuẩn thì phức tạp phết smilie

Code:
(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?

http://regexlib.com/Search.aspx?k=URL
-- w~ --
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 14/12/2010 09:49:04 (+0700) | #12 | 227007
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

WinDak wrote:

cái đó sao lại tổng quát smilie smilie a-z0-9 làm sao = \w ? ( \w còn gồm cả letters, digits, và underscores)
 

Mình nói cách của secmask mà, bạn không đọc kỹ à.

Trên máy bạn, thử với \w có match không?
Code:
$ sed 's/\[url="\?\([\w:\/\.#]*\)"\?\]\(.*\)\[\/url\]/<a href="\1" target="_blank">\2<\/a>/' input 
[url="/hvaonline/posts/list/136.html"]GRUB[/url]
[url=/hvaonline/posts/list/136.html]GRUB[/url]

Code:
$ sed 's/\[url="\?\([[:alnum:]:\/\.#]*\)"\?\]\(.*\)\[\/url\]/<a href="\1" target="_blank">\2<\/a>/' input 
<a href="/hvaonline/posts/list/136.html" target="_blank">GRUB</a>
<a href="/hvaonline/posts/list/136.html" target="_blank">GRUB</a>
Let's build on a great foundation!
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 14/12/2010 10:22:50 (+0700) | #13 | 227010
[Avatar]
WinDak
Researcher

Joined: 27/01/2002 11:15:00
Messages: 223
Offline
[Profile] [PM]
Ok quanta,
Vừa test thử trên máy thì thấy đúng là sed không hiểu \w ... (smilie xấu hổ ) version = perl thì mình test trên máy rồi smilie

Còn về tổng quát thì ý mình là phải đầy đủ syntax của URI. của secmask chỉ là loại `"` và "]" ra khỏi match nên vẫn có những giả định.

-- w~ --
[Up] [Print Copy]
  [Discussion]   Sửa link dạng BB Code thành dạng HTML 15/12/2010 00:49:52 (+0700) | #14 | 227087
Crunch
Member

[Minus]    0    [Plus]
Joined: 02/07/2008 03:41:11
Messages: 50
Offline
[Profile] [PM]
Thế này nhìn có vẻ hơi dài nhưng thật ra dễ hiểu, đỡ phải dùng regex smilie

Code:
> cat input
[url="/hvaonline/posts/list/136.html"]Sử dụng GRUB[/url]
[url=/hvaonline/posts/list/136.html]Sử dụng GRUB[/url]
> cat input | while read STRING; do LINK=$(echo $STRING | cut -d']' -f1 | cut -d= -f2 | tr -d '"'); CONTENT=$(echo $STRING | cut -d'[' -f2 | cut -d']' -f2); echo "<a href=\"$LINK\" target=\"_blank\">$CONTENT</a>"; done
<a href="/hvaonline/posts/list/136.html" target="_blank">Sử dụng GRUB</a>
<a href="/hvaonline/posts/list/136.html" target="_blank">Sử dụng GRUB</a>
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|