Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 02-18-2004, 02:20 AM
Cloudrunner's Avatar
Cloudrunner Cloudrunner is offline
 
Join Date: May 2003
Location: Butte, MT
Posts: 635
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default I suck at regexp! (read: HELP!)

So I need a little guidance.

This is for my latest idea for a hack and will be released soon.

BUT

I have setup the sql to pull all the posts from the DB that contain a URL link via
Code:
SELECT pagetext FROM posts WHERE pagetext LIKE '%[ URL ]%[ /URL ]%';
That being the case then $row['pagetext'] will be the entire post.

From that string I need to extract each and EVERY instance of '[ URL ]blah[ /URL ]' from within that string.

Now I understand I could use the explode(); function etc, but that only gives the first instance of '[ URL ]blah[ /URL ]'. I need each and every instance because my users have a habit of adding multiple URLs to their posts.

That being said, anyone who can lend a hand on this will get full credit when the hack is released.

Any takers, or even suggestions?

I've been fighting this for a few days to get the correct way to do it, and have been found a failure at it, for I suck at regexp!

Thank you in advance for any help that you may give.

)O( Cloudrunner )O(
Reply With Quote
  #2  
Old 02-18-2004, 08:45 AM
AndrewD AndrewD is offline
 
Join Date: Jul 2002
Location: Scotland
Posts: 3,486
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Cloudrunner
So I need a little guidance.

This is for my latest idea for a hack and will be released soon.

BUT

I have setup the sql to pull all the posts from the DB that contain a URL link via
Code:
SELECT pagetext FROM posts WHERE pagetext LIKE '%[ URL ]%[ /URL ]%';
That being the case then $row['pagetext'] will be the entire post.

From that string I need to extract each and EVERY instance of '[ URL ]blah[ /URL ]' from within that string.

Now I understand I could use the explode(); function etc, but that only gives the first instance of '[ URL ]blah[ /URL ]'. I need each and every instance because my users have a habit of adding multiple URLs to their posts.

That being said, anyone who can lend a hand on this will get full credit when the hack is released.

Any takers, or even suggestions?

I've been fighting this for a few days to get the correct way to do it, and have been found a failure at it, for I suck at regexp!

Thank you in advance for any help that you may give.

)O( Cloudrunner )O(
I had the same need, and this is what I came up with. Rather than looking for the URL's I pass it through parse_bbcode first, because there may be html there as well. It dumps the links and the text into $titles and $links (which are arrays - check the documemtation on preg_match)

PHP Code:
$selectpost $DB_site->query("
        SELECT "
.
            
TABLE_PREFIX "post.postid as postid, ".
            
TABLE_PREFIX "post.username as username, ".
            
TABLE_PREFIX "post.userid as userid, ".
            
TABLE_PREFIX "post.threadid as threadid, ".
            
TABLE_PREFIX "post.title as title, ".
            
TABLE_PREFIX "post.pagetext as pagetext, ".
            
TABLE_PREFIX "post.dateline as dateline, ".
            
TABLE_PREFIX "thread.title as threadtitle
        FROM "
TABLE_PREFIX "post LEFT JOIN "TABLE_PREFIX "thread
        ON "
TABLE_PREFIX "post.threadid = "TABLE_PREFIX "thread.threadid
        ORDER BY "
TABLE_PREFIX "post.dateline
    "
);

$urllist = array();

while (
$postrec $DB_site->fetch_array($selectpost)) {
   
$p parse_bbcode2($postrec['pagetext'],0,0,0,1);
   
$lines preg_split('/(\Z|<br \/>)/'$p, -1PREG_SPLIT_NO_EMPTY);
   foreach (
$lines as $line) {
      
$i preg_match_all ("/<a.*?>.*?<\/a.*?>/"$line$url PREG_SET_ORDER);
      
$k 0;
      while (
$k $i) {
         
preg_match("/>(.*?)</",$url[$k][0], $titles);
         
preg_match("/<a *href *= *\"*(.*?)\"*( |>)/",$url[$k][0], $links);
         
$k++;
      }
   }

Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 06:56 PM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.08158 seconds
  • Memory Usage 2,195KB
  • Queries Executed 13 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (2)bbcode_code
  • (1)bbcode_php
  • (1)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (2)post_thanks_box
  • (2)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (2)post_thanks_postbit_info
  • (2)postbit
  • (2)postbit_onlinestatus
  • (2)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete