Solved

PHP Code: Sub-Domain Site Number - Regular Expression Syntax Help Needed

Posted on 2011-03-05
7
498 Views
Last Modified: 2012-05-11
I'm working with a Wordpress Multisite Network (v3.0.4).

I need some help to parse the source code of the wp-admin page at:
    "http://www.domain.com/wp-admin/ms-sites.php".  

It needs to use "preg_match()" similar to this:

preg_match( "/name=\"_wpnonce_add-blog\" value=\"(.*?)\"/", $this -> page, $match ) ;
$value = $match[1] ;

The expression to be matched is the following:
<a href="http://www.domain.com/wp-admin/ms-sites.php?action=editblog&id=91" class="edit">subdomain91</a>

But I will use a variable such as the following:
$subDomain = 'subdomain91' ;

Then the expression will contain that variable...
<a href="http://www.domain.com/wp-admin/ms-sites.php?action=editblog&id=91" class="edit">$subDomain</a>

Ultimately, $match[1] must contain '91'

But keep in mind that for another "subdomain" name, the number will be different, id=xx.
0
Comment
Question by:WizeOwl
  • 5
7 Comments
 
LVL 34

Expert Comment

by:Beverley Portlock
ID: 35042982
This will do it (below) as long as the data contains no other text with id= in it.

<?php

$data = '<a href="http://www.domain.com/wp-admin/ms-sites.php?action=editblog&#038;id=91" class="edit">$subDomain</a>';

preg_match('!.*?;id=([0-9]+)".*?!s', $data, $match );

print_r( $match

Open in new window

0
 

Author Comment

by:WizeOwl
ID: 35043112
I've attached a larger code snippet (below) that represents the source code of the wp-admin page.  (or if you have a wpms blog network, you can look at the "Super Admin > Sites" page for yourself.)
 
<td class="column-title">
<a href="http://www.rootDomain.com/wp-admin/ms-sites.php?action=editblog&#038;id=91" class="edit">subDomain91</a>

<div class="row-actions">

<span class="edit"><a href="http://www.rootDomain.com/wp-admin/ms-sites.php?action=editblog&#038;id=91">Edit</a></span> | <span class='backend'><a href='http://subDomain91.rootDomain.com/wp-admin/' class='edit'>Backend</a></span> | <span class="activate"><a href="http://www.rootDomain.com/wp-admin/ms-edit.php?action=confirm&#038;action2=deactivateblog&#038;id=91&#038;msg=You+are+about+to+deactivate+the+site+subDomain91">Deactivate</a></span> | <span class="archive"><a href="http://www.rootDomain.com/wp-admin/ms-edit.php?action=confirm&#038;action2=archiveblog&#038;id=91&#038;msg=You+are+about+to+archive+the+site+subDomain91.">Archive</a></span> | <span class="spam"><a href="http://www.rootDomain.com/wp-admin/ms-edit.php?action=confirm&#038;action2=spamblog&#038;id=91&#038;msg=You+are+about+to+mark+the+site+subDomain91+as+spam.">Spam</a></span> | <span class="delete"><a href="http://www.rootDomain.com/wp-admin/ms-edit.php?action=confirm&#038;action2=deleteblog&#038;id=91&#038;msg=You+are+about+to+delete+the+site+subDomain91.">Delete</a></span> | <span class='view'><a href='http://subDomain91.rootDomain.com' rel='permalink'>Visit</a></span>	</div>
</td>

Open in new window



Here is my best shot at the preg_match code. Perhaps you can help me clean it up?


$rootDomain = rootdomain ;
$subDomain = subdomain91 ;

preg_match( "/<a href=\"http:\/\/www\." . $rootDomain . "\/wp-admin/ms-sites\.php\?action=editblog&#038;id=(.*?)\" class=\"edit\">" . $subDomain . "<\/a>/", $this -> page, $matchID ) ;
return "Match ID: " . $matchID[1] ;

However, there's a syntax "Warning" when I run the code...
<< Warning: preg_match(): Unknown modifier '-' in F:\WAMP Server\www\wpModules.php on line 94 >>

I don't know why it doesn't like the minus symbol.
0
 
LVL 75

Accepted Solution

by:
käµfm³d   👽 earned 500 total points
ID: 35043548
You forgot to escape one of your slashes here:

    "\/wp-admin/ms-sites\.

PHP is picking up the "/ms" as pattern modifiers (multi-line and single-line, respectively), and then trying to interpret the dash as a modifier as well (and the rest of the line if the dash were actually a modifier).
0
Migrating Your Company's PCs

To keep pace with competitors, businesses must keep employees productive, and that means providing them with the latest technology. This document provides the tips and tricks you need to help you migrate an outdated PC fleet to new desktops, laptops, and tablets.

 

Author Comment

by:WizeOwl
ID: 35045032
It is very close then.

I need to capture the string here, (.*?), which I thought would be in the $matchID[] array. But when I echo $matchID[0], $matchID[1], and $matchID[2], there seems to be nothing there.

Can you suggest how to accomplish this?
0
 

Author Comment

by:WizeOwl
ID: 35045101
This (below) is probably more accurate, now that I examined the syntax of preg_match() more carefully. However, it is still not working. Neither print_r shows any content from the $match array.

// Capture the first match
preg_match( "/<a href=\"http:\/\/www\." . $rootDomain . "\/wp-admin\/ms-sites\.php\?action=editblog&#038;id=(.*?)\" class=\"edit\">" . $subDomain . "<\/a>/", $this -> page, $matchALL ) ;
print_r( $matchALL[1] ) ;

// Now, isolate the important part
preg_match( "/id=(.*?)/", $matchALL[1], $matchID ) ;
print_r( $matchID[1] ) ;
0
 

Assisted Solution

by:WizeOwl
WizeOwl earned 0 total points
ID: 35045859
SOLUTION FOUND:

// First, navigate to the 'sites' page
//
$this -> newLocation( $this -> web_url . "/wp-admin/ms-sites.php" ) ;

// Then, look for the correct pattern to match.
// You want to find the ID that corresponds to the subdomain being processed
// Note: '@' symbol is the delimiter and replaces '/'
//
preg_match( "@www\." . $rootDomain . "/wp-admin/ms-sites\.php\?action=editblog&#038;id=(.*?)\" class=\"edit\">" . $subDomain . "@", $this -> page, $matchALL ) ;

// Print the results to confirm you have a correct match.
// Use print_r() for arrays, and print() for simple strings.
//
print( "matchALL: " ) ;
print_r( $matchALL ) ;
print( "<br />" ) ;

$ID = explode( "id=", $matchALL[1] ) ;
print( "ID (explode): " ) ;
print_r( $ID ) ;
print( "<br />" ) ;
print( "ID: " ) ;
print_r( $ID[0] ) ;
print( "<br />" ) ;
0
 

Author Closing Comment

by:WizeOwl
ID: 35107029
Thanks, kaufmed, for your assistance.
0

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

If your site has a few sections that need to be secure when data is transmitted between the server and local computer, such as a /order/ section for ordering or /customer/ which contains customer data, etc it would of course be recommended to secure…
This article discusses how to create an extensible mechanism for linked drop downs.
Explain concepts important to validation of email addresses with regular expressions. Applies to most languages/tools that uses regular expressions. Consider email address RFCs: Look at HTML5 form input element (with type=email) regex pattern: T…
This tutorial will teach you the core code needed to finalize the addition of a watermark to your image. The viewer will use a small PHP class to learn and create a watermark.

828 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question