我发现了一个强大的正则表达式,感谢 @PhillPafford(PHP RegEx for "Website Name" 如果你赞成我的回答,请赞成他的第一个!):
/^(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?$/
查看实际效果:
http://rubular.com/r/GOHHrucCdX
更新:
这个会在文本中的任何地方找到名字:
/(([\w]+:)?\/\/)?(([\d\w]|%[a-fA-f\d]{2,2})+(:([\d\w]|%[a-fA-f\d]{2,2})+)?@)?([\d\w][-\d\w]{0,253}[\d\w]\.)+[\w]{2,4}(:[\d]+)?(\/([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)*(\?(&?([-+_~.\d\w]|%[a-fA-f\d]{2,2})=?)*)?(#([-+_~.\d\w]|%[a-fA-f\d]{2,2})*)?/
请注意,我删除了开头的 ^ 和末尾的 $ 以使其在文本中工作:
Rubular 来源:
^ 行首
$ 行尾
http://rubular.com/r/iEVzfv2U3O
@GandalfStormCrow 注意到以下匹配:
Since I was little.My first dog
#^^^
我认为解决此问题的唯一方法是将little.My 替换为little. My:
text.gsub(/\w\.[A-Z]/) { |matched_string| matched_string.gsub('.', '. ') }
查看实际操作:
1.9.3p489 :018 > text = "hello my name is robert.My dog"
=> "hello my name is robert.My dog"
1.9.3p489 :019 > text.gsub(/\w\.[A-Z]/) { |matched_string| matched_string.gsub('.', '. ') }
=> "hello my name is robert. My dog"