views:

62

answers:

1

Can anyone translate my small Python snippet to PHP? I'm not a familiar with both languages. :(

matches = re.compile("\"cap\":\"(.*?)\"")
totalrewards = re.findall(matches, contents)
print totalrewards

Thank you for those who'd help! :(

+1  A: 

This is a direct translation of the code above, with "contents" populated for demonstration purposes:

<?php
$contents = '"cap":"foo" "cap":"wahey"';
if (preg_match_all('/"cap":"(.*?)"/', $contents, $matches, PREG_SET_ORDER)) {
    var_dump($matches);
}

The output:

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(11) ""cap":"foo""
    [1]=>
    string(3) "foo"
  }
  [1]=>
  array(2) {
    [0]=>
    string(13) ""cap":"wahey""
    [1]=>
    string(5) "wahey"
  }
}

If you want to actually do something with the result, for e.g. list it, try:

<?php
$contents = '"cap":"foo" "cap":"wahey"';
if (preg_match_all('/"cap":"(.*?)"/', $contents, $matches, PREG_SET_ORDER)) {
    foreach ($matches as $match) {
        // array index 1 corresponds to the first set of brackets (.*?)
        // we also add a newline to the end of the item we output as this
        // happens automatically in PHP, but not in python.
        echo $match[1] . "\n";
    }
}
Shabbyrobe
By the way the Python variable `totalrewards` is equivalent to `$matches[0][1]` if you use the code above.
NullUserException
When I run the python code above for a contents of '"cap":"foo" "cap":"wahey"', I get ['foo', 'wahey'] as the output. I posted a comment on the question about the nature of required output, but considering "print totalrewards" essentially prints a human-readable dump of a data structure, I consider "var_dump($matches)" to be functionally equivalent in a pure Python to PHP translation.
Shabbyrobe
um how will I be able to make it list the "foo" and "wahey" like:foowaheyetcetci tried looking up var_dump() but apparently my mind can't comprehend how to use it or how it works xDsorry if i'm being somewhat dumb
Tank Stalker
Updated again to give you the output you wanted.
Shabbyrobe