有很好的測試工具,可以讓你的工作更輕鬆。我推薦使用URI的extract
方法:
require 'uri'
str = "time=18ms\n[INFO] Calculating CPD for 0 files\n[INFO] CPD calculation finished\n[INFO] Analysis report generated in 325ms, dir size=14 KB\n[INFO] Analysis reports compressed in 187ms, zip size=8 KB\n[INFO] Analysis report uploaded in 31ms\n[INFO] ANALYSIS SUCCESSFUL, you can browse http://sonar.company.com/dashboard/index/com.company.paas.maventestproject:MavenTestProject\n[INFO] Note that you will be able to access the updated dashboard once the server has processed the submitted analysis report\n[INFO] More about the report processing at http://sonar.company.com/api/ce/task?id=AVhFxTkyob-dgWZqnfIn\n[INFO] -----------------------------------------------------------------------"
URI.extract(str)
# => ["http://sonar.company.com/dashboard/index/com.company.paas.maventestproject:MavenTestProject",
# "http://sonar.company.com/api/ce/task?id=AVhFxTkyob-dgWZqnfIn"]
然後,它找到你想要的鏈接,並使用它的一個簡單的事情。
您還需要注意URI爲該方帶來的所有其他方法,因爲它瞭解如何根據RFC分解和構建URI。
不要推出自己的代碼或正則表達式來完成別人已經完成的工作,特別是當代碼經過良好測試時。你會避免別人會陷入的陷阱。 URI的作者/維護者管理內置模式,所以我們不需要。而且,它比你想象的要複雜得多,比如:
URI::REGEXP::PATTERN::ABS_URI
"[a-zA-Z][\\-+.a-zA-Z\\d]*:(?:(?://(?:(?:(?:[\\-_.!~*'()a-zA-Z\\d;:&=+$,]|%[a-fA-F\\d]{2})*@)?(?:(?:[a-zA-Z0-9\\-.]|%\\h\\h)+|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}|\\[(?:(?:[a-fA-F\\d]{1,4}:)*(?:[a-fA-F\\d]{1,4}|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})|(?:(?:[a-fA-F\\d]{1,4}:)*[a-fA-F\\d]{1,4})?::(?:(?:[a-fA-F\\d]{1,4}:)*(?:[a-fA-F\\d]{1,4}|\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}))?)\\])(?::\\d*)?|(?:[\\-_.!~*'()a-zA-Z\\d$,;:@&=+]|%[a-fA-F\\d]{2})+)(?:/(?:[\\-_.!~*'()a-zA-Z\\d:@&=+$,]|%[a-fA-F\\d]{2})*(?:;(?:[\\-_.!~*'()a-zA-Z\\d:@&=+$,]|%[a-fA-F\\d]{2})*)*(?:/(?:[\\-_.!~*'()a-zA-Z\\d:@&=+$,]|%[a-fA-F\\d]{2})*(?:;(?:[\\-_.!~*'()a-zA-Z\\d:@&=+$,]|%[a-fA-F\\d]{2})*)*)*)?|/(?:[\\-_.!~*'()a-zA-Z\\d:@&=+$,]|%[a-fA-F\\d]{2})*(?:;(?:[\\-_.!~*'()a-zA-Z\\d:@&=+$,]|%[a-fA-F\\d]{2})*)*(?:/(?:[\\-_.!~*'()a-zA-Z\\d:@&=+$,]|%[a-fA-F\\d]{2})*(?:;(?:[\\-_.!~*'()a-zA-Z\\d:@&=+$,]|%[a-fA-F\\d]{2})*)*)*)(?:\\?(?:(?:[\\-_.!~*'()a-zA-Z\\d;/?:@&=+$,\\[\\]]|%[a-fA-F\\d]{2})*))?|(?:[\\-_.!~*'()a-zA-Z\\d;?:@&=+$,]|%[a-fA-F\\d]{2})(?:[\\-_.!~*'()a-zA-Z\\d;/?:@&=+$,\\[\\]]|%[a-fA-F\\d]{2})*)"
這有什麼好處:'/ http:\/\/\ S + /'?請參閱[這裏](http://www.rubular.com/r/aHG7BZZAmw)進行演示。 –
而不是加載一個字符串中的整個文件,逐行閱讀它。這樣,您可以快速放棄不以'[INFO]'開頭的行。然後用'\ bhttp:// \ S *'檢查這一行並解析url。 –
您需要說明用於識別您希望提取的字符串的規則。在你的例子中,你顯示你想要的字符串,但不要告訴我們*爲什麼*它是那個特定的字符串。這就像是說你有一組數字[3,5,8,12,13,20]'並且想知道如何選擇'[3,5,13]'。是因爲他們是奇數,素數還是別的什麼?你需要用問題的陳述開始你的問題,然後在適當的時候提供一個例子。當您修改以澄清時,請不要添加「編輯:」。最後,未來,請將您的例子歸結爲最基本的要領。 –