Je veux analyser du code PHP, j’ai fait regex qui devrait scinder le code PHP en atomes ( https://regex101.com/r/P074q8/1 ) mais quand j’essaie de l’exécuter, python ne parvient pas à scinder ce code source comme sur le site Web regex101.
Pourquoi mon regex travaille sur regex101.com et ne veut pas travailler en script python?
main.py
import re
class PHPParser:
def __init__(self, filename):
# read php file
with open(filename, "r") as f:
self._source = f.read()
syntax = [
r"/*.*?*/",
r"".*?"",
r"".*?"",
r"$[wd_]+", # variable name
r"w+", # function name
r"return",
r"<?php",
r"=>",
r"?>",
r"[",
r"]",
r",",
r";",
r"(",
r")",
r".",
r"n",
r"s",
r"=",
r"W",
]
s = r"(" + r"|".join(syntax) + r")"
print(s)
tokens = re.split(s, self._source, re.DOTALL | re.M | re.I | re.UNICODE)
print(tokens)
if __name__ == "__main__":
p = PHPParser("./vendor/yiisoft/yii2/base/Widget.php")
Réponses:
1 pour la réponse № 1Tu peux essayer ça,
tokens = re.findall(s, self._source, re.DOTALL | re.M | re.I | re.UNICODE)
dans lequel j'ai simplement reposé split()
fonctionner avec findall()
, parce que vous avez essayé d'obtenir une chaîne correspondante regex101.com
par same regex
, mais in your python
script, vous avez essayé de split
en faisant correspondre la chaîne.