是否可以合并一个str_replace带有正则表达式的方法,用于捕获简单的html <textfield>输入类型中的url字符串?
我正在考虑一些简单的东西,如用户的提示,如下设置:
这是一些文本,点击此链接这里.
显然,"here"这个词是它之前的url的href(或之后,如果它有所不同).文本输入来自MySQL数据库.
我相信我的解决方案的开始是这样的:
$regex = '';
$pg = $row['pg'];
$pg = str_replace('{regex goes here}', $pg);
Run Code Online (Sandbox Code Playgroud)
但我知道事情不见了.然后我会输出$ pg段落.
我一直在考虑写一个峰值拟合库一段时间.我非常了解Python,并计划在Python中实现所有内容,但是设想我最终可能必须以编译语言重新实现一些核心例程.
IIRC,Python的原始版本之一是原型语言,但是Python在允许函数,仿函数,对象传递给函数和方法方面相当自由,而我怀疑C或Fortran也不是这样.
关于我设想的函数/类应该与编译语言接口,我应该知道些什么?这些潜在问题中有多少是由cTypes,bgen,SWIG,Boost.Python,Cython或Python SIP等库来处理的?
对于这个特殊的用例,(拟合库)我想让用户将数学函数(Guassian,Lorentzian等)定义为Python函数,然后可以通过编译的代码拟合库来解释它.传递和返回数组也很重要.
所以我刚刚在Python全局解释器锁(GIL)http://blip.tv/file/2232410上看完了这个演讲.
它的要点是GIL对于单核系统来说是一个非常好的设计(Python实际上将线程处理/调度留给了操作系统).但是,这可能严重地适应多核系统,最终导致IO密集型线程被CPU密集型线程严重阻塞,上下文切换费用,ctrl-C问题[*]等等.
因此,由于GIL限制我们基本上在一个CPU上执行Python程序,我的想法是为什么不接受这个并简单地在Linux上使用taskset来设置程序与系统上某个核心/ cpu的亲和性(特别是在某种情况下)在多核系统上运行的多个Python应用程序)?
所以最终我的问题是:有没有人尝试在Linux上使用带有Python应用程序的任务集(特别是在Linux系统上运行多个应用程序,以便多个核心可以与一个或两个绑定到特定核心的Python应用程序一起使用),如果是这样的话是结果?值得做吗?是否会使某些工作负载更糟糕?我打算这样做并进行测试(基本上看看程序是否需要花费更多或更少的时间来运行),但我很乐意听取其他人的经验.
另外:David Beazley(在链接视频中发表演讲的人)指出,一些C/C++扩展手动释放GIL锁,如果这些扩展针对多核进行优化(即科学或数字数据分析/等),那么而不是为数字运算获得多核的好处,扩展将被有效地削弱,因为它仅限于单个核心(因此可能显着降低程序速度).另一方面,如果您没有使用此类扩展
我没有使用多处理模块的原因是(在这种情况下)程序的一部分是严重的网络I/O绑定(HTTP请求),所以有一个工作线程池是一个很好的方式从一个盒子挤出性能一个线程触发一个HTTP请求,然后因为它在I/O上等待就放弃了GIL而另一个线程可以做到这一点,所以程序的一部分可以轻松地运行100多个线程而不会伤害CPU太多让我实际使用可用的网络带宽.对于无堆栈的Python/etc,我对重写程序或替换我的Python堆栈并不过分感兴趣(可用性也是一个问题).
[*]只有主线程可以接收信号,所以如果你发送一个ctrl-C,Python解释器基本上试图让主线程运行,这样它就可以处理信号,但因为它不能直接控制运行哪个线程(它留给操作系统)它基本上告诉操作系统继续切换线程,直到它最终命中主线程(如果你不幸,可能需要一段时间).
我正在与Mac OS X上安装SIP for Python作斗争.最后在编译和安装后我运行SIP(本地)的控制台表单文件夹时我可以导入sipconfig,但是当我在其他文件夹中时我不能 - 没有模块叫做sipconfig.
我的问题是 - 如果我想让它们全局可用(例如"import os"),我必须复制模块的文件夹在哪里,或者我如何检查它,因为位置"/Library/Python/2.6/site-packages /"不起作用.
我是C++程序员/网络管理员的开始,但我想如果有人指出我正确的方向,我可以学习如何做到这一点.大多数教程都使用旧代码进行演示,这些代码由于某种原因不再有效.
因为我在Linux上,所以我需要的是如何编写原始Berkeley套接字的解释.有人可以给我一个快速的运行吗?
我无法理解负前瞻正则表达式的更精细细节.在阅读了Regex前瞻,后视和原子组之后,当我找到这个描述时,我认为我对负向前瞻有了很好的总结:
(?!REGEX_1)REGEX_2仅在
REGEX_1不匹配时匹配; 检查后REGEX_1,搜索REGEX_2开始于同一位置.
希望我理解算法,我做了两句话侮辱; 我想找一个没有一个字的句子.特别...
侮辱: 'Yomama很难看.而且,她闻起来像一只湿狗.
要求:
- 测试1:返回一个没有'丑陋'的句子.
- 测试2:返回没有"外观"的句子.
- 测试3:返回没有'气味'的句子.
我将测试单词分配给了$arg,我过去常常(?:(?![A-Z].*?$arg.*?\.))([A-Z].*?\.)执行测试.
(?![A-Z].*?$arg.*?\.) 用测试词拒绝一个句子是一个消极的先行([A-Z].*?\.)匹配至少一个句子.关键部分似乎是在理解正则表达式引擎在处理负前瞻后开始匹配的位置.
预期成果:
- 测试1($ arg ="丑陋"):"而且,她闻起来像一只湿狗."
- 测试2($ arg ="看起来"):"Yomama很难看."
- 测试3($ arg ="气味"):"Yomama很难看."
实际结果:
- 测试1($ arg ="丑陋"):"而且,她闻起来像一只湿狗." (成功)
- 测试2($ arg ="看起来"):"Yomama很难看." (成功)
- 测试3($ arg ="气味"):失败,不匹配
起初我认为测试3失败了,因为([A-Z].*?\.)太贪心并且匹配两个句子; 但是,(?:(?![A-Z].*?$arg.*?\.))([A-Z][^\.]*?\.)也没有用.接下来我想知道python否定前瞻实现是否存在问题,但perl给了我完全相同的结果.
最后我找到了解决方案,我不得不.*?通过使用来拒绝表达式中的句点[^\.]*?; 所以这个正则表达式工作:(?:(?![A-Z][^\.]*?$arg[^\.]*?\.))([A-Z][^\.]*?\.)
但是,我有另一个问题; "Yomama很难看." 它里面没有"气味".所以,如果.*?应该是一个非贪婪的比赛,为什么我不能完成测试3 (?:(?![A-Z].*?$arg.*?\.))([A-Z].*?\.)?
我的雇主有一个专用模块1,我们用于内部单元/系统测试; 但是,这个模块的作者不再在这里工作,我被要求用它测试一些设备.
问题是pyfoo需要古老版本的twisted(v8.2.0)并且它导入twisted了33个不同的文件.我尝试pyfoo在v11.0.0下运行单元测试,我甚至没有看到TCP SYN数据包2.不幸的是,我已经在我的实验室linux服务器上安装了扭曲的v11.0.0,并且我有自己的代码依赖于它.
为了解决这个问题,我一直在绞尽脑汁,但我只能提出以下选择:
选项A.安装新版本的python,安装virtualenv,然后安装旧版本twisted的virtualenv.只运行pyfoo在这个新版本的python下需要的测试.
选项B.使用以下内容编辑所有33个文件:DIR = '../'; sys.path.insert(0, DIR)并在源代码下面的相应目录中安装旧版本的python.
选项C.尝试修复pyfoo使用v11.0.0 3
我有什么选择吗?除了上面的选项A之外,还有更优雅的方法来解决这个问题吗?
pyfoo为了争论而称之为pyfoo这不是一件轻而易举的事,而且这项工作的截止日期很短.我计划在RTOS平台上实现一个小规模的数据采集系统.(在QNX或RT-Linux系统上.)
据我所知,这些作业是使用C/C++执行的,以充分利用系统.然而,我很想知道并且想要学习一些经验丰富的人的意见,然后我盲目地进入编码行动,是否可行且更明智地用Python编写所有内容(从低级仪器通过闪亮的图形用户界面连接).如果没有,将设计的时序关键部分与"C"混合,或者用C编写所有内容,甚至不用一行Python代码.
或者至少使用Python包装C代码以便更容易地访问系统.
你建议我以哪种方式工作?如果你指出一些类似的设计案例和进一步的阅读材料,我会很高兴的.
谢谢
注1:强调QNX的原因是我们已经有一个基于QNX 4.25的数据采集系统(M300)用于我们的大气测量实验.这是一个专有系统,我们无法访问它的内部.进一步研究QNX可能对我们有利,因为6.4有免费的学术许可选项,Python 2.5附带,以及最近的GCC版本.我从未测试过RT-Linux系统,不知道它在稳定性和效率方面与QNX有多大可比性,但我知道Python系统的所有成员和非Python工具(如Google Earth)的新系统可以在大多数情况下开箱即用.
说,我有一个255.255.255.242的子网,我在该子网内有一个已知的IP,如192.168.1.101.
现在我计算IP范围的方式是这样的:
在子网掩码中,找到不是255的第一个八位字节.在我的例子中,它是第4个八位字节,它的242.所以取256并减去242,这给了我们14.所以我们现在知道这些网络,192.168 .1.x网络,都有14的范围.所以只需开始列出它们......
192.168.1.0
192.168.1.14
192.168.1.28
....42
....56
....70
....84
....98
....112
Run Code Online (Sandbox Code Playgroud)
在这里我们可以停下来 我的地址192.168.1.101属于.98网络..98包含从192.168.1.98到192.168.1.111的所有IP地址,因为我们知道192.168.1.112启动下一个网络.
我想确认一下,这是否是正确和最简单的过程.