RE: [PHP] Regex question: replacing incidences of character when not enclosed within HTML tags? (somewhat solved)
> So, thinking about it a little more, I decided what I was looking for was > a > regular expression that would allow me to replace any incidences of > hyphens > when not contained within tags (i.e., when not contained between "<" and > ">"). > > And this is where things have ground to a halt. Hi All, After toying with this for several hours I decided to give up on trying to work out a way to achieve this via a single regular expression replacement. My simpler 'solution' now is to pull out all text not contained within tags using preg_match_all(), and run a str_replace() across these values to replace any incidences of hyphens, and then another str_replace() to replace the content with the substring where hyphens were found. So, something like: )(.+?)(<|$)/m", $text,$hypharr); for ($i=0; $i < count($hypharr[0]); $i++){ $rephyph = str_replace("-","- ", $hypharr[0][$i]); if ($rephyph <> $hypharr[0][$i]){ $text= str_replace($hypharr[0][$i],$rephyph,$text); } } ?> This seems to achieve what I'm looking for, ie replacing hyphens when not contained in HTML tags. Regards, Murray -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] regex question
Murry's solution here is ideal since it only captures the single occurrence. Since I want to use it for a preg_replace(), it is perfect. A couple of folks sent this pattern [EMAIL PROTECTED]@[EMAIL PROTECTED]; but, it doesn't work because I then have to remove the unwanted caracters on either side. All it says is [not @[EMAIL PROTECTED]@] but, it captures the 2 characters on each side. Murry's solution (? Thanks everyone Murray @ PlanetThoughtful wrote: What pattern can I use to match ONLY single occurrences of a character in a string. e.g., "Some text @ and some mo@@re and [EMAIL PROTECTED], etc @@@. I only want the two occurrences with a single occurrence of "@". @{1} doesn't work; there are 4 matches. Thanks Please ignore my last email re: your question. I realized that the negation of the range containing the "@" would end up capturing unwanted characters. As an alternative, try the following: preg_match_all('/(? $thing, PREG_OFFSET_CAPTURE); print_r($thing); Hope that's a little more relevant to your question. Regards, Murray -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] regex question
On Monday 16 May 2005 22:53, Al wrote: > What pattern can I use to match ONLY single occurrences of a character in a > string. > > e.g., "Some text @ and some mo@@re and [EMAIL PROTECTED], etc @@@. Use the following: /(^@)(@{1})(^@)/ This way you'll be sure the regexp will match only single occurences ot hte '@' symbol. Please take in mind that if you have this symbol in the beginning of the string or at the end - you have to modify this. > > I only want the two occurrences with a single occurrence of "@". > > @{1} doesn't work; there are 4 matches. > > Thanks -- Cyberly yours, Petar Nedyalkov Devoted Orbitel Fan :-) PGP ID: 7AE45436 PGP Public Key: http://bu.orbitel.bg/pgp/bu.asc PGP Fingerprint: 7923 8D52 B145 02E8 6F63 8BDA 2D3F 7C0B 7AE4 5436 pgpWSAkSaWAeD.pgp Description: PGP signature
Re: [PHP] regex question
$text = 'Some text @ and some mo@@re and [EMAIL PROTECTED], etc @@@.'; /** Word boundaries before and after @ */ $regex = '/[EMAIL PROTECTED]/'; preg_match_all($regex, $text, $matches); var_dump($matches); ?> -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
RE: [PHP] regex question
> Try (for example if character was "A") ... > > ([^A]|^)A([^A]|$) > > This matches four cases: > A is at beginning of string and there is another letter after it, > A has a letter before it and a letter after it, > A is at end of string and there is a letter before it, > or A is the only character in the string. I think this has the same problem that my first attempt at this regex experienced. I.e., it will correctly 'find' single instances of 'A', but it will 'match' against unwanted characters on either side of each 'found' 'A' because they are not-A. For example, the following: preg_match_all('/([^A]|^)A([^A]|$)/','A sentence with instAnces of AAA chArActers', $thing, PREG_OFFSET_CAPTURE); print_r($thing); produces: Array ( [0] => Array ( [0] => Array ( [0] => A [1] => 0 ) [1] => Array ( [0] => tAn [1] => 19 ) [2] => Array ( [0] => hAr [1] => 34 ) ) [1] => Array ( [0] => Array ( [0] => [1] => 0 ) [1] => Array ( [0] => t [1] => 19 ) [2] => Array ( [0] => h [1] => 34 ) ) [2] => Array ( [0] => Array ( [0] => [1] => 1 ) [1] => Array ( [0] => n [1] => 21 ) [2] => Array ( [0] => r [1] => 36 ) ) ) Note the multiple instances of characters other than 'A' in the array. Also note that the 4th qualifying 'A' (the second 'A' in 'chArActers') is missed, because the 'r' is already part of the capture of the preceding 'A'). On the other hand, the following: preg_match_all(' /(? Array ( [0] => Array ( [0] => A [1] => 0 ) [1] => Array ( [0] => A [1] => 20 ) [2] => Array ( [0] => A [1] => 35 ) [3] => Array ( [0] => A [1] => 37 ) ) ) Here, only the target characters are matched, without the confusion of extra unwanted characters. All 4 target 'A's are caught, because the patterns on either side of the 'A' in the regex pattern are non-capturing. So, basically this is employing a non-capturing negative look-behind and a non-capturing negative look-ahead, rather than capturing negated character classes. I've probably only managed to confuse things more than they were, but I'm hoping some of what I've said above makes sense (to me, if no-one else). Regards, Murray -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
RE: [PHP] regex question
> What pattern can I use to match ONLY single occurrences of a character in > a string. > > e.g., "Some text @ and some mo@@re and [EMAIL PROTECTED], etc @@@. > > I only want the two occurrences with a single occurrence of "@". > > @{1} doesn't work; there are 4 matches. > > Thanks Please ignore my last email re: your question. I realized that the negation of the range containing the "@" would end up capturing unwanted characters. As an alternative, try the following: preg_match_all('/(?http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
RE: [PHP] regex question
> What pattern can I use to match ONLY single occurrences of a character in > a string. > > e.g., "Some text @ and some mo@@re and [EMAIL PROTECTED], etc @@@. > > I only want the two occurrences with a single occurrence of "@". > > @{1} doesn't work; there are 4 matches. "/[EMAIL PROTECTED]@[EMAIL PROTECTED]/" seems to do what you're looking for. In other words, match the "@" symbol where it is not preceded or followed by another "@" symbol. To test, try: preg_match_all('/[EMAIL PROTECTED]@[EMAIL PROTECTED]/','Some @ text with the @t sym@@bol @@@', $thing, PREG_OFFSET_CAPTURE); print_r($thing); There may be a more intuitive way to do this, but at least it seems to work. Regards, Murray -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] regex question
On Mon, 16 May 2005, Al wrote: What pattern can I use to match ONLY single occurrences of a character in a string. e.g., "Some text @ and some mo@@re and [EMAIL PROTECTED], etc @@@. I only want the two occurrences with a single occurrence of "@". [EMAIL PROTECTED]@[EMAIL PROTECTED] should do it I think. @{1} doesn't work; there are 4 matches. Thanks -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] regex question
Try (for example if character was "A") ... ([^A]|^)A([^A]|$) This matches four cases: A is at beginning of string and there is another letter after it, A has a letter before it and a letter after it, A is at end of string and there is a letter before it, or A is the only character in the string. On 5/16/05, Al <[EMAIL PROTECTED]> wrote: > What pattern can I use to match ONLY single occurrences of a character in a > string. > > e.g., "Some text @ and some mo@@re and [EMAIL PROTECTED], etc @@@. > > I only want the two occurrences with a single occurrence of "@". > > @{1} doesn't work; there are 4 matches. > > Thanks > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] REGEX Question
Hello Two things: First wouldn't it be faster to use strpos and substr if you simply have to find the literate and . Second: If you use your regex and you have something like " This is some text to grasp this is text I don't want This is some other text I want" The result would be " This is some text to grasp this is text I don't want This is some other text I want". You should use the " *+" quantifier in order to only grab the content " This is some text to grasp". Regards Stefan Langer -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] REGEX Question
On 17-Jun-2003 Ron Dyck wrote: > I need to match text between two html comment tags. > > I'm using: preg_match("/(.*)/", $data, > $Match) > > Which work fine until I have carriage returns. The following doesn't > match: > Use the m (multiline) modifier: preg_match("/(.*)/m", ... Regards, -- Don Read [EMAIL PROTECTED] -- It's always darkest before the dawn. So if you are going to steal the neighbor's newspaper, that's the time to do it. -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] REGEX Question
. matches any character except newline by default, use s modifier: preg_match("/(.*)/s", $data, $Match) Ron Dyck wrote: I need to match text between two html comment tags. I'm using: preg_match("/(.*)/", $data, $Match) Which work fine until I have carriage returns. The following doesn't match: Nullam auctor pellentesque sem. Aenean semper. Aenean magna justo, rutrum et, consequat a, vehicula non, arcu. Mauris cursus vulputate pede. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Appreciate you help. == Ron Dyck Webbtech.net == -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Regex question
Troy May wrote: How would take a regular non-formatted text link (http://www.link.com) and turn it into ready to post HTML? (http://www.link.com>http://www.link.com) Darn, Outlook formats it, but you get the idea. It would just be typed out normally. Any ideas? function MakeUrl ($text) { $text = preg_replace("/(www\.[a-zA-Z0-9\.\/#~:?+=&%@!_\\-]+)/", "http://\\1"; ,$text);#make www. -> http://www. $text = preg_replace("/(http:\/\/)(?!www)([a-zA-Z0-9\.\/#~:?+=&%@!_\\-]+)/", "\\1\\2" ,$text); #eg-- http://kernel.org $text = preg_replace("/(http:\/\/)(www\.)([a-zA-Z0-9\.\/#~:?+=&%@!\\-_]+)/", "\\1\\2\\3" ,$text); #eg -- http://www.google.com -> http://www.google.com";>www.google.com return $text; } -- Sean -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] Regex question...
I need to do a few other things that require regex though, like making either an a or an @ match (people love to get around filters by using symbols instead of letters...). @ Edwin wrote: Hello, "Leif K-Brooks" <[EMAIL PROTECTED]> wrote: [snip] But that doesn't work at all. Any ideas on how to do this? [/snip] Would't it be easier (and faster) to use http://www.php.net/manual/en/function.str-replace.php ? - E -- The above message is encrypted with double rot13 encoding. Any unauthorized attempt to decrypt it will be prosecuted to the full extent of the law.
Re: [PHP] Regex question...
Hello, "Leif K-Brooks" <[EMAIL PROTECTED]> wrote: [snip] > But that doesn't work at all. Any ideas on how to do this? [/snip] Would't it be easier (and faster) to use http://www.php.net/manual/en/function.str-replace.php ? - E -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] RegEx question
eregi("php$", $stringtobecompared); See: http://www.php.net/manual/en/ref.regex.php Gurhan - Original Message - From: "David Busby" <[EMAIL PROTECTED]> To: "php-general" <[EMAIL PROTECTED]> Sent: Tuesday, July 02, 2002 4:49 PM Subject: [PHP] RegEx question > List, > How can I regex to compare the last three chars of a string to "php"? > > /B > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
RE: [PHP] RegEx question
$string = 'somethingphp'; $pat = 'php$'; $hasphp = ereg($pat, $string); Henning Sittler www.inscriber.com -Original Message- From: David Busby [mailto:[EMAIL PROTECTED]] Sent: Tuesday, July 02, 2002 4:49 PM To: php-general Subject: [PHP] RegEx question List, How can I regex to compare the last three chars of a string to "php"? /B -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
Re: [PHP] RegEx question
Actually for a job like this look to substr() to extract the last three chars as a string and compare them in an if() statment. http://www.php.net/manual/en/function.substr.php -Kevin - Original Message - From: "David Busby" <[EMAIL PROTECTED]> To: "php-general" <[EMAIL PROTECTED]> Sent: Tuesday, July 02, 2002 2:49 PM Subject: [PHP] RegEx question > List, > How can I regex to compare the last three chars of a string to "php"? > > /B > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php
RE: [PHP] Regex question
> As far as I can see (notice: I'm not a regex-king ;) the regex seems correct > to me. The only thing I'm wondering about is the "/^<" (second last line of > the citation). Together with your expression in the array it results in > preg_match("/<\/ I'm wondering if that ( not only
Re: [PHP] Regex question
> > If you want the [ to be escaped in the regex you have to "double-escape" > it: > > $x = "\ \["; (sorry, the two \ should be together without a space but my > > stupid mail-app converts the string thinking it's an network address) > > so $x will contain "\[" as you want ( the first backslash escapes the > > second). > > Hi Stefan, > > Thanks very much for that, it does make sense :-) > > Unfortunately it still hasn't fixed the problem... I suppose my question has > now boiled down to "do I need to escape !, <, or - in a regex?" :-) > > Cheers > Jon here the expression again: >>>$tags = array ("script", >>> ""); >>>foreach ($tags as $currentTag) >>> if (preg_match ("/^<\/". $currentTag. "/", $content)) >>> // do something As far as I can see (notice: I'm not a regex-king ;) the regex seems correct to me. The only thing I'm wondering about is the "/^<" (second last line of the citation). Together with your expression in the array it results in preg_match("/<\/http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
RE: [PHP] Regex question
> If you want the [ to be escaped in the regex you have to "double-escape" it: > $x = "\ \["; (sorry, the two \ should be together without a space but my > stupid mail-app converts the string thinking it's an network address) > so $x will contain "\[" as you want ( the first backslash escapes the > second). Hi Stefan, Thanks very much for that, it does make sense :-) Unfortunately it still hasn't fixed the problem... I suppose my question has now boiled down to "do I need to escape !, <, or - in a regex?" :-) Cheers Jon -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
Re: [PHP] Regex question
> Hi all, > > I've got a regex that's working fine, apart from one little problem. > > $tags = array ("script", >""); A quick shot (perhaps I miss the point ;): if you do $x = "\["; then $x will contain "[". If you then do a regex with preg_match("/$x/", ..." eg. then it get's evaluated as preg_match("/[/", ... If you want the [ to be escaped in the regex you have to "double-escape" it: $x = "\ \["; (sorry, the two \ should be together without a space but my stupid mail-app converts the string thinking it's an network address) so $x will contain "\[" as you want ( the first backslash escapes the second). > foreach ($tags as $currentTag) > if (preg_match ("/^<\/". $currentTag. "/", $content)) > // do something > > > Witan Jardine > 13 Southampton Place > London WC1A 2AL > Tel: 020 7404 4004 I hope I didn't miss the point and could help you best regards Stefan Rusterholz -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
Re: [PHP] Regex question
In article <[EMAIL PROTECTED]>, [EMAIL PROTECTED] (Boaz Yahav) wrote: > In case anyone is interested, eregi("HTTP/1.[01].302",$output) seems to > work :) "." == "any character" (including, but not necessarily, a period). If you want to match a period, escape it or put it in square braces: eregi("HTTP/1\.[01].302",$output) -or- eregi("HTTP/1[.][01].302",$output) You might also want to limit what's acceptable before the status code by changing ".302" to: " 302" //space -or- "[ ]302" //space, made more obvious -or- "[[:space:]]302" //any whitespace character -- CC -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
RE: [PHP] Regex question
In case anyone is interested, eregi("HTTP/1.[01].302",$output) seems to work :) berber -Original Message- From: Boaz Yahav Sent: Tuesday, July 31, 2001 2:03 PM To: PHP General (E-mail) Subject: [PHP] Regex question I'm trying to find if a string exists inside a string. Instead of using strstr() twice I want to use eregi() once. What I want to check is if "HTTP/1.1 302" or "HTTP/1.0 302" exists in some $output. I'm trying something like : eregi("[\"HTTP/1.\"]+[0-1]+[\" 302\"]",$output) eregi("[HTTP/1.]+[0-1]+[ 302]",$output) eregi("HTTP/1.+[0-1]+ 302",$output) But I must be off cause it doesn't work. Anyone? thanks berber -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED] -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
Re: [PHP] RegEx Question
if (preg_match_all("|testing(.*?);blah|s", $str, $matches)) { // do what you want with $matches: see in the manual! var_dump($matches); } - Original Message - From: "George E. Papadakis" <[EMAIL PROTECTED]> To: "PHP List" <[EMAIL PROTECTED]> Sent: 2001. május 20. 19:18 Subject: [PHP] RegEx Question > Hi, > > I have an ereg question::. > $data = a big string , > while (ereg ("testing([^;]*);blah(.*)",$data,$args)) { > $this = $args[1]; > $data = $args[2]; > } > > What I wanna do ,obviously, is to get all the strings between 'testng' and > 'blah' in an array. > This will do it, yet when it wont work when special chars such \n exist > between 'testing' and 'blah'. > Any ideas? > > > > -- > PHP General Mailing List (http://www.php.net/) > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > To contact the list administrators, e-mail: [EMAIL PROTECTED] > -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]
Re: [PHP] RegEx Question
On Sunday 20 May 2001 19:18, George E. Papadakis wrote: > I have an ereg question::. > $data = a big string , > while (ereg ("testing([^;]*);blah(.*)",$data,$args)) { > $this = $args[1]; > $data = $args[2]; > } > > What I wanna do ,obviously, is to get all the strings between 'testng' > and 'blah' in an array. > This will do it, yet when it wont work when special chars such \n exist > between 'testing' and 'blah'. Use preg_match() with 's' or 'm' as modifier (one of these is correct...) -- Christian Reiniger LGDC Webmaster (http://sunsite.dk/lgdc/) The most exciting phrase to hear in science, the one that heralds new discoveries, is not "Eureka", but "That's funny..." - Isaac Asimov -- PHP General Mailing List (http://www.php.net/) To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]