Re: [PHP] (another) regex difficulty

2003-10-02 Thread jonas_weber
Am Donnerstag, 02.10.03 um 01:37 Uhr schrieb Cristian Lavaque:
doh, I now understand your question, you don't mean the asterisk 
literally,
but as any character that follows a backslash... sorry -_-
that's right ;) -- anyway, thanks for your effort!

my problem was that i misunderstood the escape-the-meta-char-idea (see 
below).

Am Mittwoch, 01.10.03 um 23:23 Uhr schrieb Curt Zirzow:
'\\' always gets translated to '\'  So the string:

'/(\\)/' translates to '/(\)/' which is an invalid regex, you'll
get a complaint about unclosed paren.
this is also a bit tricky:
echo beg \\ end\n;
echo beg \ end\n;

c) Why do I hate regular expressions so much?
perhaps because you're using them wrong.
klugscheisser ;)

I've answered all 5 of em so far.
thanks, your answers helped a lot!

- jns

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[PHP] regex/preg_replace() difficulty

2003-10-01 Thread jonas_weber
Regular Expressions: How can I indicate that the contents of a term 
(user input*) needs to be treated as 'non-operators/control characters' 
(as *word* to match in that exact way)?
(* Because the term is a user's input I can't escape the control 
characters manually.)

Example:
$result = 
preg_replace('/('.$termWithOptionalBold.')(\/?span[^]*)*()/si', 
'span class=highlight\1/span', $result);

[If $termWithOptionalBold is a . (period) for example, any char will 
be matched--instead of only the .]

Any suggestions?

Thanks a lot for your effort!
Best wishes,
jonas
PS: Somewhere I read that '\Q' would do something like that but it 
didn't work.

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[PHP] (another) regex difficulty

2003-10-01 Thread jonas_weber
regular expressions
the example below should turn any character exept \* (*= any char) 
into an x:

$term = preg_replace('/[^(\\\)+(.){1}]/', 'x', $term);

but i guess because of the [brackets] the . (period) is treated as 
character . instead as metacharacter (that matches any char).

anyone knows how to work around this?

thanks for your effort
best wishes,
jns
ps: thanks for your help, holmes and kilimajer!

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Re: [PHP] (another) regex difficulty

2003-10-01 Thread jonas_weber
01.10.03 at 18:17 Curt Zirzow wrote:
preg_replace('/(?!\\).{1}/', 'x', $term);
01.10.03 at 18:27 CPT John W. Holmes wrote:
$term = preg_replace('/[^\\]./','x',$term);
they don't work (thanks anyway)

it's pretty simple: i need a regex that matches any character in a 
string except \* (* stands for any char that follows the \).

example: this is \ba test
should match: this a is test
isn't there a way to do this?

best wishes,
jns
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[PHP] regex drive me crazy

2003-10-01 Thread jonas_weber
1. The PHP manual sais to escape the escape char, it has to be written 
twice*, but:
$term = preg_replace('/(\\)/', 'backslash $1', $term);
causes an error** while using three backslashes (see 2.) works.

2.1.
$term = beg \ end;
print preg_replace('/(\\\)/', 'backslash $1', $term);
returns: beg backslash \ end
2.2.
$term = beg \\ end;
print preg_replace('/(\\\)/', 'backslash $1', $term);
returns: beg backslash \ end (the same as 2.1.)
2.3.
$term = beg \\\ end;
print preg_replace('/(\\\)/', 'backslash $1', $term);
returns: beg backslash \backslash \ end
Does this make ANY sense?

- jns

* http://www.php.net/manual/en/pcre.pattern.syntax.php
** Warning: Compilation failed: missing ) at offset 3 in 
/home/jonas/public_html/test01.php on line 3



Am Mittwoch, 01.10.03 um 19:14 Uhr schrieb CPT John W. Holmes:
Regular expressions are for pattern matching... not matching 
everything
BUT a pattern.
good point! ;)

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


Re: [PHP] regex drive me crazy

2003-10-01 Thread jonas_weber
Am Mittwoch, 01.10.03 um 22:27 Uhr schrieb Chris W. Parker:
Seeing as how you haven't had a response yet, I'll ask this: what
exactly is your question? I'm not sure as to what it is that you want.
My question are:
a) Why does the PHP manual say that backslashes get escaped by writing 
them twice while this causes an error in my example (see below)?
b) Why does a different input (2.1. and 2.2.) result in the same output 
(in the example I enclosed)?
c) Why do I hate regular expressions so much?

Choose one.

- Jns

8
1. The PHP manual sais to escape the escape char, it has to be written 
twice*, but:
$term = preg_replace('/(\\)/', 'backslash $1', $term);
causes an error** while using three backslashes (see 2.) works.

2.1.
$term = beg \ end;
print preg_replace('/(\\\)/', 'backslash $1', $term);
returns: beg backslash \ end
2.2.
$term = beg \\ end;
print preg_replace('/(\\\)/', 'backslash $1', $term);
returns: beg backslash \ end (the same as 2.1.)
2.3.
$term = beg \\\ end;
print preg_replace('/(\\\)/', 'backslash $1', $term);
returns: beg backslash \backslash \ end
* http://www.php.net/manual/en/pcre.pattern.syntax.php
** Warning: Compilation failed: missing ) at offset 3 in 
/home/jonas/public_html/test01.php on line 3
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[PHP] Re: highlighting multi term search results

2003-09-08 Thread jonas_weber
Am Montag, 08.09.03 um 04:21 Uhr schrieb Lee O'Mara:

Why not just allow for bold tags in the search term? What I mean is, I 
think you can get the results you want by allowing any number of open 
or close bold tags between each letter of the search term.
i thought so too (but i had no idea how to code it); this must be a 
solution.
i've tested your function like this:

?
function highlight($src_terms, $src_terms_int, $result) {
$i = 0;
  while ($i  $src_terms_int) {
  $termWithOptionalBold = preg_replace('/(.)/', '(\/?b) 
*\1',$src_terms[$i]);
  $result = preg_replace('/(\/?b)*('.$termWithOptionalBold.')(\/?b) 
*/si', 'b\2/b', $result);
  $i++;
  }
return $result;
}

$search = te est; // user input to search for
$src_terms = explode( , $search);
$src_terms_int = count($src_terms);
$result = this is just a test; // result from database
print highlight($src_terms, $src_terms_int, $result);
?
but it didn't highlight anything.

btw, the bold tag in this example is used to simplify it and stands for 
something like span class=highlight/span what makes it even 
trickier, i guess.

thanks for your help!
jns
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[PHP] highlighting multi term search results

2003-09-07 Thread jonas_weber
hi, i'm working on a function that highlights search results. problem: 
a search input like te est; two terms that match one word (test). 
the mysql query matches entries like this but my function isn't able to 
highlight them the right way:

?
function highlight($src_terms, $src_terms_int, $result) {
$i = 0;
  while ($i  $src_terms_int) {
  $result = preg_replace('/('.$src_terms[$i].')/si', 
'b'.$src_terms[$i].'/b', $result);
  $i++;
  }
return $result;
}

$search = te est; // user input to search for
$src_terms = explode( , $search);
$src_terms_int = count($src_terms);
$result = this is just a test; // result from database

print highlight($src_terms, $src_terms_int, $result);
?
output: this is just a bte/bst
(after the first term is highlighted the second one can't be found 
anymore.)

someone has an idea how to work around this?

thanks for your effort!
jonas
ps: please also let me know if you know of a website that might help, i 
didn't find anything useful. thanks!

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[PHP] Re: highlighting multi term search results

2003-09-07 Thread jonas_weber
Am Sonntag, 07.09.03 um 14:11 Uhr schrieb Catalin Trifu 
[EMAIL PROTECTED]:

Here the $result is changed to 'bte/bst' on the first search.
Obviously on the second replace the term will not be found anymore!
yes, it's obvious.

like i said:
output: this is just a bte/bst
(after the first term is highlighted the second one can't be found 
anymore.)
but how to work around it??

- jns

/snip/
hi, i'm working on a function that highlights search results. problem: 
a search input like te est; two terms that match one word (test). 
the mysql query matches entries like this but my function isn't able 
to highlight them the right way:

?
function highlight($src_terms, $src_terms_int, $result) {
$i = 0;
  while ($i  $src_terms_int) {
  $result = preg_replace('/('.$src_terms[$i].')/si', 
'b'.$src_terms[$i].'/b', $result);
  $i++;
  }
return $result;
}

$search = te est; // user input to search for
$src_terms = explode( , $search);
$src_terms_int = count($src_terms);
$result = this is just a test; // result from database

print highlight($src_terms, $src_terms_int, $result);
?
output: this is just a bte/bst
(after the first term is highlighted the second one can't be found 
anymore.)

someone has an idea how to work around this?

thanks for your effort!
jonas
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[PHP] Re: highlighting multi term search results

2003-09-07 Thread jonas_weber
Am Sonntag, 07.09.03 um 21:17 Uhr schrieb John W. Holmes:

output: this is just a bte/bst
(after the first term is highlighted the second one can't be found 
anymore.)
but how to work around it??
Highlight the longest words first?
I don't think that would change anything. A search for te est then 
highlights test into tbest/b and te can't be found anymore.

thanks anyway!!
j
snip 8
?
function highlight($src_terms, $src_terms_int, $result) {
$i = 0;
  while ($i  $src_terms_int) {
  $result = preg_replace('/('.$src_terms[$i].')/si', 
'b'.$src_terms[$i].'/b', $result);
  $i++;
  }
return $result;
}

$search = te est; // user input to search for
$src_terms = explode( , $search);
$src_terms_int = count($src_terms);
$result = this is just a test; // result from database

print highlight($src_terms, $src_terms_int, $result);
?
output: this is just a bte/bst
(after the first term is highlighted the second one can't be found 
anymore.)

someone has an idea how to work around this?

thanks for your effort!
jonas
ps: please also let me know if you know of a website that might help, i 
didn't find anything useful. thanks!

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php