예제 #1
0
def preg_replace(args, executer, local):
    global USING_PCRE
    # mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
    pattern, replacement, subject = [executer.get_val(x) for x in args[:3]]
    limit = 0 if len(args) < 4 else executer.get_val(args[3])
    count_ref = None if len(args) < 5 else args[4]
    # print dict(zip('pattern,replacement,subject'.split(','), [pattern, replacement, subject]))
    # print '\n'.join(repr(x) for x in  [pattern, replacement, subject, limit, count_ref])
    # print local
    if not USING_PCRE:
        warn(executer)
        if isinstance(pattern, phparray.PHPArray):
            pattern = pattern.values()
        else:
            pattern = [str(pattern)]
        if isinstance(replacement, phparray.PHPArray):
            replacement = replacement.values()
        else:
            replacement = [replacement] * len(pattern)
        rep_len = len(replacement)
        total_subs = 0
        for i, pat in enumerate(pattern):
            if i < rep_len:
                repl = replacement[i]
            else:
                repl = ''
            regex, flags = parse_regex(pat)
            subject, subs_made = re.subn(regex, repl, subject, limit, flags)
            total_subs += subs_made
        if len(args) >= 4:
            executer.set_val(args[4], subs_made)
        return subject
    raise StandardError()
예제 #2
0
def preg_replace(args, executer, local):
    global USING_PCRE
    # mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
    pattern, replacement, subject = [executer.get_val(x) for x in args[:3]]
    limit = 0 if len(args) < 4 else executer.get_val(args[3])
    count_ref  = None if len(args) < 5 else args[4]
    # print dict(zip('pattern,replacement,subject'.split(','), [pattern, replacement, subject]))
    # print '\n'.join(repr(x) for x in  [pattern, replacement, subject, limit, count_ref])
    # print local
    if not USING_PCRE:
        warn(executer)
        if isinstance(pattern, phparray.PHPArray):
            pattern = pattern.values()
        else:
            pattern = [str(pattern)]
        if isinstance(replacement, phparray.PHPArray):
            replacement = replacement.values()
        else:
            replacement = [replacement] * len(pattern)
        rep_len = len(replacement)
        total_subs = 0
        for i, pat in enumerate(pattern):
            if i < rep_len:
                repl = replacement[i]
            else:
                repl=''
            regex, flags = parse_regex(pat)
            subject, subs_made = re.subn(regex, repl, subject, limit, flags)
            total_subs+=subs_made
        if len(args) >= 4:
            executer.set_val(args[4], subs_made)
        return subject
    raise StandardError()
예제 #3
0
 def test_large_subn(self, size):
     # Issue #10182: indices were 32-bit-truncated.
     s = 'a' * size
     r, n = re.subn('', '', s)
     self.assertEqual(r, s)
     self.assertEqual(n, size + 1)
예제 #4
0
 def test_re_subn(self):
     self.assertEqual(re.subn("(?i)b+", "x", "bbbb BBBB"), ('x x', 2))
     self.assertEqual(re.subn("b+", "x", "bbbb BBBB"), ('x BBBB', 1))
     self.assertEqual(re.subn("b+", "x", "xyz"), ('xyz', 0))
     self.assertEqual(re.subn("b*", "x", "xyz"), ('xxxyxzx', 4))
     self.assertEqual(re.subn("b*", "x", "xyz", 2), ('xxxyz', 2))