Re: preg_match fails to resolve variable as a subject
| From: | Tamara Temple | Date: | Fri, 03 Dec 2010 06:33:04 +0000 |
| Subject: | Re: preg_match fails to resolve variable as a subject | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-309828@lists.php.net to get a copy of this message | ||
On Dec 2, 2010, at 11:33 PM, Da Rock wrote:
On 11/29/10 09:10, Richard Quadling wrote:Did you miss the ":" at the beginning of RIchard's suggested regex? /:(\d++)/ would gather up all digits following a ":". If the output from the mixer command is always something like dd:dd (irrespective of trailing period), the regex above would always return the second set of digits.On 27 November 2010 04:45, Da Rock<php-list@herveybayaustralia.com.au> wrote:On 11/27/10 13:51, Tamara Temple wrote:On Nov 26, 2010, at 7:28 PM, Da Rock wrote:On 11/27/10 00:57, Richard Quadling wrote:On 26 November 2010 00:07, Da Rock<php-list@herveybayaustralia.com.auApologies for the delay. That works, except it will catch all instances. I need it to catch the last number specifically and not the period. The output will also output a previous and new reading- I need the new reading. And I also need to allow for the possibility of a period. So.... here's what I have: /(\d++)[^.]?$ Which works as long as there is no period at the end. I just can't seem to get my head around it. I need a guru... :)The regex is a valid regex. It's just useless for the data you are providing it. I'm wondering what is missing from your output? The var_dump says the text is a 41 character string, but the data you provided only has 36 characters in it. What elements of the string do you want to capture? /:(\d++)/ would catch the number after the :Thank you for that- that did it. I removed the \. I am a little confused though; that regex was tested on several test sites and was deemed accurate on them, and one of them actually supplied the preg_match code. And if I run the command on a shell it actually outputs exactly the right subject for the regex- not to mention it got printed inadvertently (using system() ) via the php exactly the same. So I don't think I missed it somehow. What I have constantly seen come up (shell and php/html) is: Mixer vol is currently set to 75:75. (including the period) Don't get me wrong- you guys make sense; my system doesn't. I need to get to the bottom of this so I can ensure my code will port well. I don't want to get it all working and find it breaks when I run it on another system, albeit same OS (FreeBSD). Could be updates or variations of releases. Just to check again, I ran the command on the shell again and sure enough the period is no longer there- but I can't for the life of me figure out when that changed as this code has never worked (and yes, I added in the \. to match the end of line because it originally wasn't working). Another great mystery? Weird... :) Thanks again guys.$ matches end of line, but since your last match expression is to match explicitly the character '.' before end of line, and there's a newline, it won't match. Again, use trim() to get rid of the newline character at the end of the string returned by exec(). Looking at the output orwrote:Haven't tried yet, but isn't that what $ is for? End of line?preg_match("/(\d{1,3})(\.)$/", exec($mixer . ' ' . $command),&$matches)Can you ... var_dump(exec($mixer . ' ' . $command)); I wonder if the output includes a new line which you are not accounting for in the regex.And exec only gives one line- the last line of the output of the command. You have to provide a reference to an array for the entire output. var_dump gives: string(41) "Mixer vol is currently set to 75:75"It also looks like \d{1,3}\. won't match anything in the output string given by the command.