我想解析一些PHP代码,我已经制作了正则表达式,它应该将PHP代码拆分为原子(https://regex101.com/r/P074q8/1),但是当我尝试执行它时,python无法像在regex101网站上那样拆分此源代码。
为什么我的正则表达式正在使用regex101.com并且不想在实际的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'\$[\w\d_]+', # 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')
答案 0 :(得分:1)
你可以试试这个,
tokens = re.findall(s, self._source, re.DOTALL | re.M | re.I | re.UNICODE)
我只是用split()
重新设置了findall()
函数,因为您试图通过regex101.com
same regex
获取匹配字符串,但in your python
脚本,通过匹配字符串尝试split
。