Regex help needed

This is a discussion on Regex help needed within the PHP General forums, part of the PHP Programming Forums category; First, the prob you got : WARNING .... comes from the following error: (\s+face=\"Verdana, Arial, Helvetica, sans-serif\"|)&...


Go Back   Usenet Forums > PHP Programming Forums > PHP General

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 07-16-2003
Nomadeous
 
Posts: n/a
Default Re: Regex help needed

First, the prob you got : WARNING ....
comes from the following error:
(\s+face=\"Verdana, Arial, Helvetica, sans-serif\"|)>
After the | (OR) sign, you must define another case, example:
echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font
size=\"2\"(\s+face=\"Verdana, Arial, Helvetica,
sans-serif\"|\s)>\s*purchasing power parity", '%POWER%',
'<td><tr>sdsdss<tr bgcolor="#f8f8f1" face="Verdana, Arial, Helvetica,
sans-serif"><td><font size="2">Purchasing power parity');

Secondly, it's right that the \s expression is not recognised in
" purchasing\s+power\s+parity " , a little strange, but you can use two
different ways instead of '\s':
- [[:space:]]
- [ ]
The brackets allows you to define a sequence of characters patterns (in
the second case above, the space character).
It will give:
echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font
size=\"2\">\s*purchasing[[:space:]]+power[[:space:]]+parity", '%POWER%',
'<td><tr>sdsdss<tr bgcolor="#f8f8f1"><td><font size="2">Purchasing power
parity');


Just a little help, you can find on the page
http://www.php.net/manual/en/ref.regex.php that could be useful for you:

^ Start of line
$ End of line
n? Zero or only one single occurrence of character 'n'
n* Zero or more occurrences of character 'n'
n+ At least one or more occurrences of character 'n'
n{2} Exactly two occurrences of 'n'
n{2,} At least 2 or more occurrences of 'n'
n{2,4} From 2 to 4 occurrences of 'n'
.. Any single character
() Parenthesis to group expressions
(.*) Zero or more occurrences of any single character, ie, anything!
(n|a) Either 'n' or 'a'
[1-6] Any single digit in the range between 1 and 6
[c-h] Any single lower case letter in the range between c and h
[D-M] Any single upper case letter in the range between D and M
[^a-z] Any single character EXCEPT any lower case letter between a and z.

Pitfall: the ^ symbol only acts as an EXCEPT rule if it is the
very first character inside a range, and it denies the
entire range including the ^ symbol itself if it appears again
later in the range. Also remember that if it is the first
character in the entire expression, it means "start of line".
In any other place, it is always treated as a regular ^ symbol.
In other words, you cannot deny a word with ^undesired_word
or a group with ^(undesired_phrase).
Read more detailed regex documentation to find out what is
necessary to achieve this.

[_4^a-zA-Z] Any single character which can be the underscore or the
number 4 or the ^ symbol or any letter, lower or upper case

?, +, * and the {} count parameters can be appended not only to a single
character, but also to a group() or a range[].

therefore,
^.{2}[a-z]{1,2}_?[0-9]*([1-6]|[a-f])[^1-9]{2}a+$
would mean:

^.{2} = A line beginning with any two characters,
[a-z]{1,2} = followed by either 1 or 2 lower case letters,
_? = followed by an optional underscore,
[0-9]* = followed by zero or more digits,
([1-6]|[a-f]) = followed by either a digit between 1 and 6 OR a
lower case letter between a and f,
[^1-9]{2} = followed by any two characters except digits
between 1 and 9 (0 is possible),
a+$ = followed by at least one or more
occurrences of 'a' at the end of a line.


Sid a écrit:
Hello,

Well I am doing by first reg ex operations and I am having problems
which I just cannot figure out.

For example I tried
echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font
size=\"2\">\s*purchasing power parity", '%POWER%', '<td><tr>sdsdss<tr
bgcolor="#f8f8f1"><td><font size="2">Purchasing power parity');
and this worked perfectly,

but when I chnaged that to
echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font
size=\"2\">\s*purchasing\s+power\s+parity", '%POWER%',
'<td><tr>sdsdss<tr bgcolor="#f8f8f1"><td><font size="2">Purchasing power
parity');
It does not detect the string. Srange. According to what I know, \s+
will detect a single space also. I tried chnaging the last 2 \s+ to \s*
but this did not work also.
Any ideas on this one?

As I proceed I would like the expression to detect the optional face
attribute also, so I tried
echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font
size=\"2\"(\s+face=\"Verdana, Arial, Helvetica,
sans-serif\"|)>\s*purchasing power parity", '%POWER%',
'<td><tr>sdsdss<tr bgcolor="#f8f8f1" face="Verdana, Arial, Helvetica,
sans-serif"><td><font size="2">Purchasing power parity');
.... and this gave me an error like
Warning: eregi_replace(): REG_EMPTY:çempty (sub)expression in
D:\sid\dg\test.php on line 2

Any ideas? BTW any place where I can get started on regex? I got a perl
book that explains regex, but I have got to learn perl first (I dont
know any perl)

Thanks in advance.

- Sid

Sid a écrit:
> Hello,
>
> Well I am doing by first reg ex operations and I am having problems which I just cannot figure out.
>
> For example I tried
> echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font size=\"2\">\s*purchasing power parity", '%POWER%', '<td><tr>sdsdss<tr bgcolor="#f8f8f1"><td><font size="2">Purchasing power parity');
> and this worked perfectly,
>
> but when I chnaged that to
> echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font size=\"2\">\s*purchasing\s+power\s+parity", '%POWER%', '<td><tr>sdsdss<tr bgcolor="#f8f8f1"><td><font size="2">Purchasing power parity');
> It does not detect the string. Srange. According to what I know, \s+ will detect a single space also. I tried chnaging the last 2 \s+ to \s* but this did not work also.
> Any ideas on this one?
>
> As I proceed I would like the expression to detect the optional face attribute also, so I tried
> echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font size=\"2\"(\s+face=\"Verdana, Arial, Helvetica, sans-serif\"|)>\s*purchasing power parity", '%POWER%', '<td><tr>sdsdss<tr bgcolor="#f8f8f1" face="Verdana, Arial, Helvetica, sans-serif"><td><font size="2">Purchasing power parity');
> ... and this gave me an error like
> Warning: eregi_replace(): REG_EMPTY:çempty (sub)expression in D:\sid\dg\test.php on line 2
>
> Any ideas? BTW any place where I can get started on regex? I got a perl book that explains regex, but I have got to learn perl first (I dont know any perl)
>
> Thanks in advance.
>
> - Sid


Reply With Quote
  #2 (permalink)  
Old 07-16-2003
Curt Zirzow
 
Posts: n/a
Default Re: [PHP] Regex help needed

Sid <sidh@hathway.com> wrote:
> Hello,
>
> Well I am doing by first reg ex operations and I am having problems which I just cannot figure out.
>
> For example I tried
> echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font size=\"2\">\s*purchasing power parity", '%POWER%', '<td><tr>sdsdss<tr bgcolor="#f8f8f1"><td><font size="2">Purchasing power parity');
> and this worked perfectly,
>
> but when I chnaged that to
> echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font size=\"2\">\s*purchasing\s+power\s+parity", '%POWER%', '<td><tr>sdsdss<tr bgcolor="#f8f8f1"><td><font size="2">Purchasing power parity');
> It does not detect the string. Srange. According to what I know, \s+ will detect a single space also. I tried chnaging the last 2 \s+ to \s* but this did not work also.
> Any ideas on this one?



I'd do something like this, unless your string must have to have the
attributes to the html elements.

<tr[^>]*>[[:space:]]*<td[^>]*>[[:space:]]*<font[^>]*>[[:space:]]*purchasing[[:space:]]*power[[:space:]]*parity

> As I proceed I would like the expression to detect the optional face attribute also, so I tried
> echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font size=\"2\"(\s+face=\"Verdana, Arial, Helvetica, sans-serif\"|)>\s*purchasing power parity", '%POWER%', '<td><tr>sdsdss<tr bgcolor="#f8f8f1" face="Verdana, Arial, Helvetica, sans-serif"><td><font size="2">Purchasing power parity');
> ... and this gave me an error like
> Warning: eregi_replace(): REG_EMPTY:çempty (sub)expression in D:\sid\dg\test.php on line 2


(\s+face=\"Verdana, Arial, Helvetica, sans-serif\"|)>\s*purchasing power parity
the problem is regex is expecting something here---^

you can change it to:
(\s+face=\"Verdana, Arial, Helvetica, sans-serif\">|>)\s*purchasing power parity

>
> Any ideas? BTW any place where I can get started on regex? I got a perl book that explains regex, but I have got to learn perl first (I dont know any perl)


Go right to the source:
http://www.oreilly.com/catalog/regex/

>
> Thanks in advance.
>
> - Sid


Curt
--

Reply With Quote
  #3 (permalink)  
Old 07-17-2003
Sid
 
Posts: n/a
Default Regex help needed

Hello,

Well I am doing by first reg ex operations and I am having problems which I just cannot figure out.

For example I tried
echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font size=\"2\">\s*purchasing power parity", '%POWER%', '<td><tr>sdsdss<tr bgcolor="#f8f8f1"><td><font size="2">Purchasing power parity');
and this worked perfectly,

but when I chnaged that to
echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font size=\"2\">\s*purchasing\s+power\s+parity", '%POWER%', '<td><tr>sdsdss<tr bgcolor="#f8f8f1"><td><font size="2">Purchasing power parity');
It does not detect the string. Srange. According to what I know, \s+ will detect a single space also. I tried chnaging the last 2 \s+ to \s* but this did not work also.
Any ideas on this one?

As I proceed I would like the expression to detect the optional face attribute also, so I tried
echo eregi_replace ("<tr bgcolor=\"#F8F8F1\">(\s*)<td>\s*<font size=\"2\"(\s+face=\"Verdana, Arial, Helvetica, sans-serif\"|)>\s*purchasing power parity", '%POWER%', '<td><tr>sdsdss<tr bgcolor="#f8f8f1" face="Verdana, Arial, Helvetica, sans-serif"><td><font size="2">Purchasing power parity');
.... and this gave me an error like
Warning: eregi_replace(): REG_EMPTY:çempty (sub)expression in D:\sid\dg\test.php on line 2

Any ideas? BTW any place where I can get started on regex? I got a perl book that explains regex, but I have got to learn perl first (I dont know any perl)

Thanks in advance.

- Sid
Reply With Quote
Reply


Thread Tools
Display Modes

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

vB code is On
Smilies are Off
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On



All times are GMT +1. The time now is 05:07 PM.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.0.0