要:
目前,國產化自主安全已在軍事指控系統領域逐步推進。設計與實現了一套全國產化自主安全的后勤保障指控系統,包括全國產化硬件平臺的設計與適配,以及基于國產化軟硬件平臺的指控軟件系統的設計與實現。在全國產化硬件平臺的設計中,分析了國產化計算、存儲和通信設備的發展現狀,以及在本系統中的選型設計;在指控軟件系統的設計中,首先對基礎平臺軟件進行了分析,其次針對本系統在數據接入層和展現層分別采用C/S軟件架構和B/S軟件架構進行設計與實現,驗證了Qt開發框架和B/S軟件架構在國產化軟硬件平臺的適應性。本系統的設計與實現會對國產化關鍵軟硬件在軍事信息中的規?;瘧煤拖到y化建設起到借鑒作用。
中文引用格式:衛建芳,張瑞權,喻瑤瑤. 基于自主安全的后勤保障指控系統設計與應用[J].電子技術應用,2019,45(7):89-92.
英文引用格式:Wei Jianfang,Zhang Ruiquan,Yu Yaoyao. Design and application of logistics support command and control system based on discretionary security technology[J]. Application of Electronic Technique,2019,45(7):89-92.
0 引言
實現軍事指控信息系統全國產化自主安全,是國家軍事安全戰略的重中之重。之前發生的“棱鏡門事件”和“中興事件”都清楚地表明,軍事指控信息系統的自主安全工作迫在眉睫,只有實現軍事指控信息系統全國產化自主安全,才能保障我國的軍事信息系統建設平時不受限于人、戰時不受制于人,才能從根本上降低“后門”之類的信息安全風險[1]。國內現有軍事指控信息系統的關鍵軟硬件設備,如操作系統、數據庫、處理器等,普遍采用國外廠商的產品,嚴重受制于人,安全隱患巨大。目前,國家已大力推進全國產化自主安全進程,逐步建設軍事指控信息系統的全國產化硬件平臺,下一步工作,將基于全國產化硬件平臺,通過對等替換、系統性替換或平臺替換等方式開展指控軟件國產化工作[2]。
本課題從后勤保障指控系統的實際應用情況出發,依據全國產化自主安全原則,對后勤保障指控系統進行了系統架構設計、硬件平臺建設以及軟件系統建設,其中軟件系統的數據接入層和綜合顯示層分別采用C/S架構和B/S架構,分別驗證C/S軟件架構和B/S軟件架構在國產化硬件系統和國產操作系統平臺下的可用性和適應性。
1 系統架構
后勤保障指控系統由硬件平臺和軟件系統組成。硬件平臺由全國產化的服務器、顯示微機、磁盤陣列、交換機和單向傳輸設備組成。軟件系統包括基本平臺軟件和指控系統軟件,基礎平臺軟件有國產麒麟操作系統和國產數據庫軟件,指控系統軟件包括接口服務軟件和指揮監控軟件。后勤保障指控系統架構圖如圖1所示。
2 硬件平臺
在軍事信息系統的全國產化過程中,硬件平臺的建設是關鍵,而硬件平臺全國產化的核心就是國產通用CPU。目前,依托國家“核高基”重大專項,國產通用CPU已逐步走向系列化和實用化,并已打造出一些成熟的品牌,有龍芯、飛騰和申威等,2018年5月,龍芯、飛騰和申威CPU服務器進入政府采購名錄,這對全國化自主安全的推進有重大意義。
在后勤保障指控系統硬件平臺中,主要選用飛騰CPU。飛騰CPU是“核高基”重大專項工程成果,飛騰先后推出了FT-1500A、FT-2000、FT-2000+等一系列高性能CPU產品。在性能方面,飛騰CPU是64位通用CPU,兼容ARM V8 指令集,采用國際先進的28 nm工藝流片,具有高性能、低功耗等特點,經測試,FT-2000+系列處理器與2014年Intel至強E5主流服務器CPU性能相當,可實現對Intel中高端“至強”服務器芯片的替代;在應用方面,飛騰聯合了400多家企業構建以飛騰CPU為核心的全自主生態系統,覆蓋了從高性能計算、服務器、桌面、嵌入式等多個應用領域,為黨政辦公系統、基礎設施關鍵行業信息系統、云計算與大數據平臺、工業控制系統等多個領域的國產化提供全面的解決方案。
后勤保障指控系統硬件平臺由全國產化的服務器、顯示微機、磁盤陣列、交換機和單向傳輸設備組成。
(1)服務器與顯示微機
隨著國產化電子信息產業的發展以及國內企業在技術上的積累,基于國產CPU的計算機設備進步神速,已初步形成一些成熟的品牌,主要有浪潮、曙光和長城等,其產品功能和性能指標已達到業界主流水平,可在試驗任務領域的非關鍵系統中試點應用。浪潮作為國內領先的服務器系統廠商,率先推出了基于飛騰處理器的通用服務器產品,實現了從整機架構、核心部件處理器到操作系統的全自主化研制,產品功能和性能指標處于業界前列,后勤保障指控系統服務器選用浪潮服務器,滿足系統應用需求。顯示微機選用浪潮DF3010,處理器為飛騰1500A,四核,主頻為1.5 GHz;內存為8 GB;獨立顯卡,核心頻率大于1 GHz,顯存為2 GB,滿足系統綜合顯示需求。
(2)磁盤陣列
存儲是數據的載體,它對于信息安全來說是一道必須守住的底線。存儲的自主安全是保證國家信息安全的重要前提和基礎。國內廠商一直積極地從存儲底層架構、高端存儲以及存儲核心軟件方面尋求突破,通過技術沉淀及發展,形成了自主化的品牌。后勤保障指控系統存儲設備選用華勝HSZL-310FB,華勝HSZL-310FB是全國產自主安全的統一存儲系統,采用國產化處理器;標配雙控制器、32 GB高速緩存/控制器;標配8個千兆iSCSI、4個8 GB FC主機接口,支持CIFS、NFS、iSCSI、FC等協議;提供全中文國產存儲管理軟件,具備良好的兼容性,針對國產的操作系統及數據庫,有良好的性能表現。
(3)交換機
網絡交換機產品,雖然不存在與應用系統、數據庫等軟件的兼容適配問題,但依賴于核心芯片的成熟,隨著飛騰、龍芯、申威等CPU的成熟及周邊生態的完善,以及盛科高性能交換芯片的量產發布,自主安全交換機也實現了突破式的發展,從硬件到軟件,基本實現國產化,完全滿足網絡設備自主安全的要求。后勤保障指控系統網絡設備選用仰聯信通G9606,仰G9600系列產品核心器件采用國產CPU、自主研發ASIC芯片和自主研發的軟硬件系統,完全規避網絡安全隱患,支持各種鏈路冗余、部件冗余和設備冗余,打造高可靠網絡,完全滿足系統全國產化自主安全的業務需求。
3 軟件系統設計
后勤保障指控系統軟件包括基本平臺軟件和指控系統軟件,基礎平臺軟件有國產麒麟操作系統和國產數據庫軟件,指控系統軟件包括接口服務軟件和指揮監控軟件[3]。
3.1 基礎平臺軟件
基礎平臺軟件包括國產麒麟操作系統和國產數據庫。
(1)國產麒麟操作系統
國產操作系統是打造自主安全生態體系的重要一環,目前面向服務器和桌面平臺應用的國產操作系統已比較成熟,主要有銀河麒麟、中標麒麟、普華操作系統等,已在政務、金融、電力、教育、國防、交通、醫療和制造等多個行業取得廣泛深入應用,在后勤保障指控系統中選用銀河麒麟操作系統[4]。
(2)國產數據庫
數據庫是后勤保障指控系統中信息資源管理與信息處理的核心基礎軟件。近年來,在國家軟件扶持政策、“核高基”重大專項以及政府采購等的支持下,國產數據庫軟件市場規模以20%以上的速度快速增長,人大金倉、達夢、神舟通用、南大通用等企業的國產數據庫軟件產品的功能和性能都有長足的進步,已經成功應用于政府、軍工、電信、電力、金融、教育等行業[5]。在軍工行業,神通數據庫已成功應用于長征火箭、神舟飛船等型號設計,為保證系統的安全性與穩定性,在后勤保障指控系統中選用神通數據庫。
3.2 指控系統軟件
為了以弱耦合方式實現后勤保障指控系統的數據集中采集、存儲、管理、轉發和顯示等功能,將后勤保障指控系統軟件劃分為兩個軟件子系統:接口服務軟件和指揮監控軟件。為了積極探索B/S軟件架構和C/S軟件架構在國產化軟硬件平臺上的適用性,后勤保障指控系統軟件采用B/S、C/S兩種模式并存的設計思想,接口服務軟件采用C/S軟件架構,用Qt進行開發;指揮監控軟件采用B/S軟件架構,基于前后端分離設計思想,前端采用HTML5+CSS3+JavaScript進行開發,后臺服務器端采用Java和Scala實現。
(1)接口服務軟件
接口服務軟件是后勤保障指控系統數據的輸入接口,主要功能是實現各種數據采集接口,從供水、供暖、供電、氣象、試驗任務等系統采集實時數據,經過數據處理,存儲至指控系統數據庫,并推送給指揮監控后臺。接口服務軟件是后勤保障指控系統的核心,為保障系統的健壯性和可靠性,接口服務軟件采用雙機熱備運行模式,通過心跳檢測技術對接口服務器雙機進行主備機管理。接口服務軟件采用模塊化分層設計思想,整個軟件劃分為3層:
①通信接口層:主要實現與外部系統進行數據交互,實現各種數據通信接口,完成數據采集、轉發和主備機切機等功能。
②數據應用層:主要實現數據處理、存儲、推送功能。
③人機交互層:主要處理人機交互數據,完成數據配置、狀態顯示和通信數據的實時監控。
(2)指揮監控軟件
指揮監控軟件是后勤保障指控系統的綜合顯示窗口,主要功能是實現各集成接入系統的實時數據仿真顯示;根據監控數據對各系統的異常信息進行檢測診斷,給出輔助決策信息;全方位展示勤務系統風采,圖像化展示各系統各點號的詳細情況;對試驗任務進行配置,并流程化顯示試驗任務進程;對系統軟硬件運行狀態進行監控顯示;對各系統歷史數據、故障數據和試驗任務數據進行查詢顯示[6]。指揮監控軟件采用B/S軟件架構,主要包括客戶端和服務器端兩部分。服務器端主要實現實時數據接收、處理和分發功能、數據異常檢測功能、系統軟硬件運行狀態監控功能、試驗任務配置管理功能和歷史數據查詢服務功能[7]。客戶端主要根據服務器端提供的數據及服務進行前端展示,包括系統風采展示、數據仿真監控顯示、系統運管監控顯示、試驗任務流程推進顯示和數據查詢分析展示。
根據指控系統軟件設計方案,確定指控系統軟件系統架構圖如圖2所示。
4 軟件系統實現
(1)接口服務軟件
接口服務軟件采用C/S軟件架構,使用Qt Creater集成開發工具進行軟件編碼實現,Qt是一個跨平臺的C++圖形用戶界面應用程序框架,通過“一次編寫,隨處編譯”的方式提供統一的跨平臺解決方案,對銀河麒麟操作系統提供友好支持。Qt提供了豐富的API函數庫,包括多達250個以上的C++類,支持OpenGL圖形渲染,極大提高了軟件開發效率。依據接口服務軟件設計,對各模塊進行類包實現,主要的類包如表1所示。
(2)指揮監控軟件
指揮監控軟件采用B/S軟件架構,主要包含前端和后臺服務器端兩部分,前端基于Node.js框架,采用HTML5+CSS3+JavaScript進行軟件編碼實現;后臺服務器端采用Java和Scala實現,其中包含5個Java類包和7個Scala 類包,具體類包的功能如表2所示。
5 結論
基于后勤保障指控系統的應用需求,以及全國產自主安全的建設原則,本文提出了一種全國產化軟硬件平臺的指控系統架構,通過對系統硬件平臺進行建設以及國產化適配,對軟件系統進行設計、開發與應用,驗證了Qt開發框架和B/S軟件架構在國產化軟硬件平臺的適應性。
目前,國內已基本形成了自主安全的全國產化產業鏈,從底層的CPU,到服務器、微機等整機產品,到操作系統、數據庫、中間件、辦公軟件等基礎軟件產品[8]。后續,隨著國家政策的扶持和引導,自主安全技術的發展將向商業化、規?;€步推進,各行業各領域的國產化工作也將逐步開展,基于國產化軟硬件平臺的應用軟件研發將會成為普遍需求,本文也為此工作的開展起到借鑒作用。
參考文獻
[1] 史芳,蔡思捷,李威.軍事信息系統國產化關鍵軟硬件的應用研究[J].信息化研究,2016,42(4):14-16.
[2] 程健,吳蔚.國產化計算機平臺在指揮控制系統中的應用研究[J].自動化與信息工程,2011(3):41-44.
[3] 范成,李芳芳,范祥華,等.基于國產化軟硬件平臺的指控系統軟件設計[C].2014第二屆中國指揮控制大會論文集(上),2014:175-178.
[4] 李永剛,李欣泉,郭力兵,等.麒麟操作系統平臺軟時統同步方法研究[J].電子技術應用,2018,44(9):129-133.
[5] 段榮.國產數據庫在軍事信息系統中的應用[J].電子技術與軟件工程,2015(8):208-209.
[6] 張超,趙平,何靜,等.基于MVC模式的指控系統軟件設計與實現[J].強激光與粒子束,2013,25(5):91-95.
[7] 陳奡,王超,張永,等.國產化Web信息系統性能評估模型與優化方法[J].指揮信息系統與技術,2015,6(4):41-45.
[8] 謝宙宇,臧飛.基于國產軟硬件的信息系統性能優化技術[J].指揮信息系統與技術,2014,5(3):59-63.
作者信息:
衛建芳,張瑞權,喻瑤瑤
(華北計算機系統工程研究所,北京100083)
層架構(3-tier application) ,通常就是將整個業務應用劃分為:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。
三層架構圖
表現層(UI),通俗講就是展現給用戶的界面,對應項目中的Web層包含Servlet和Controller等。
業務邏輯層(BLL):也稱作領域層,負責系統業務邏輯的處理,對應項目中Service和ServiceImpl等。
數據訪問層(DAL):該層所做事務直接操作數據庫,針對數據的增添、刪除、修改、更新、查找等,對應項目中的Dao。
參考范文
摘要:
本人于 2018 年 1 月參與了中石化 XX 油田 XX 采油廠“用電管理系統”的項目建設,該系統建設目標是實現分單位、分線路、分系統評價、優化、考核,全面提升采油廠用電管理水平。在該項目組中我擔任系統架構師一職,主要負責系統整體架構設計。本文以該項目為例,討論系統三層架構的設計過程,重點討論系統在設計過程和在設計實施過程中碰到的一些問題和解決方法,最后說明采用三層架構所帶來的效果,以及可以改進的地方。在我的帶領下,項目實施非常順利,并獲得采油廠領導及廠、區多級用戶的一致好評,該項目也成功獲得了當年度分公司科技進步創新一等獎。
正文:
“用電管理系統”項目是采油廠能源管控中心系統的一個子系統。能源管控中心是中石化集團公司十三五規劃中的“能效倍增”計劃在勝利油田分公司的示范應用項目,該示范項目能夠在實現企業節能目標管理、能源計量統計、節能潛力識別、能效分析優化的同時,有效支撐企業實施節能技術改造、促進企業用能水平不斷提升“用電管理系統”的建設目標是建立覆蓋廠、區兩級用電管理一體化體系,實現分單位、分線路、分系統評價、優化、考核,達到電網運行質量實時監控、異常情況精準管控、能耗總量全面受控,按照運行產量的方式運行電量,全面提升采油廠用電管理水平。該項目功能設計參考 PDCA 閉環管理的理念,共設計包括用電計劃、用電分析、用電優化、用電考核、設備管理等五大功能模塊。 我作為單位技術骨干之一,主持并參與了項目計劃制定、需求分析、設計、編碼、設計、測試等階段的工作。由于油田系統對安全性、可靠性、可用性和擴展性要求很高,
我選擇了三層 B/S 架構作為該系統的軟件體系架構,下面,我將分層次詳細介紹三層 B/S 軟件體系結構的設計過程。
(1)表示層采用了 HTML5+Vue +BootStrap 等前端技術。
由于用戶提出全廠的電力系統拓撲圖能夠自由定制,我們綜合考慮多種方案后選擇 了使用 HTML5 Canvas 技術來實現電力系統拓撲圖的自由定制。 HTML5 是互聯網的下一 代標準,是構建以及呈現互聯網內容的一種語言方式.被認為是互聯網的核心技術之一。 最終采用 HTML5 Canvas 技術實現的拓撲圖的非常輕巧,性能出色,能夠支持上萬圖元,操作流暢,并且支持矢量圖形,無極縮放等。Vue 是一套用于構建用戶界面的漸進式JavaScript 框架。Vue 與其他 JS 庫不同,它的核心庫只關注視圖層,非常容易學習,非常容易且方便與第三方庫或既有項目整合。項目組的兩個新接觸 vue 的開發人員在極短時間內就掌握了相關開發技巧,為項目前端的快速開發打下了良好的基礎。Bootstrap是最受歡迎的基于 HTML、CSS、JS 的框架之一,是一個用于快速開發 Web 應用程序和網站的前端框架。我們采用基于 Bootstrap 的系統界面樣式及響應式的展現形式得到了客戶的稱贊,為后續項目工作的開展打下了良好的基礎。
(2)中間業務邏輯層采用 SpringMVC+Apache Shiro,并使用 ehcache 緩存技術以提高訪問效率。
我們選擇了當前最優秀的 MVC 框架之一的 SpringMVC 來簡化開發,使開發人員可以專注于表示邏輯和業務邏輯的開發工作,SpringMVC 是一種實現了 Web MVC 設計模式的請求驅動類型的輕量級 Web 框架。通過框架的使用,縮短了開發周期,減少了開發費用和維護費用,提高了開發的成功率?;诎踩苑矫婵紤],我們選擇 Apache Shiro,它是一個功能強大且易于使用的 Java 安全框架,為開發人員提供了一個直觀而全面的解決方案,用于身份驗證、授權、加密和會話管理。通過使用 SpringMVC+Apache Shiro的分層設計,實現了各層次低耦合,高內聚,并嚴格遵循了 web 安全的相關規范,通過前后臺雙重驗證,參數編碼傳輸,密碼 SHA-256 加密存儲,shiro 權限驗證等手段,從根本上避免了 SQL 注入,XSS 攻擊,CSRF 攻擊等常見的 web 攻擊手段。為防止頻繁讀取數據庫導致系統性能下降問題,我們選擇采用開源的 J2Cache 兩級緩存框架,即一級采用 Ehcache,二級采用 Redis 緩存技術,通過該框架的使用,提高了系統性能和訪問效率。
(3)數據層選擇 MyBatis,數據庫選擇 Oracle 11g。
數據層方面我們選擇了 MyBatis 作為持久層框架,它可以使用簡單的 XML 或注解來配置和映射原生信息,將接口和 Java 的 POJOs(Plain Ordinary Java Object,普通的 Java 對象)映射成數據庫中的記錄。MyBatis 簡單易學、靈活并且解除了 sql 與程序代碼的耦合,通過提供 DAO 層,將業務邏輯和數據訪問邏輯分離,使系統的設計更清晰,更易維護,更易單元測試。這種 sql 和代碼分離的方式,極大提高了系統的可維護性。 另外基于安全性和穩定性方面考慮,我們選擇了 Oracle 11g 作為數據庫。 但是,在設計的過程中也遇到了一些困難,我們主要采取了以下的辦法來解決:
(1)電力拓撲庫設計。項目啟動伊始所面臨最大的難題是厘清全廠一百多條供電線路及線路上所帶的提升、注入、集輸、轉供、后輔等多類用電數據,實現線路用電數據的閉合。經過對在用系統及數據庫的多次調研分析發現,該庫共需涉及 EPBP 電力庫,源頭庫,PCS 數據庫,廠用電管理庫,設備檔案庫以及分線計量庫等 6 類不同數據源,數據關系極其復雜。由于項目組比較缺乏實際的現場生產經驗,對這些復雜數據源毫無頭緒,無從下手。但通過項目組主動與甲方多次采用用戶訪談、發放調查問卷、聯合需求計劃會議及現場觀摩的方式進行溝通,對多類業務數據有了較為清晰的認識,經過項目組的共同努力與甲方的積極配合,中間又經歷了數次返工、改版,最終成功完成了電網拓撲數據庫設計。完成后的拓撲庫共設計六十余張數據表,該設計邏輯關系清晰、具有良好的可擴展性,為后續軟件開發工作的順利進行打下了堅實的基礎。系統上線后,全廠每天的實際用電約在 110 萬 kWh 左右,通過數據閉合后自動采集的用電數據達到了100 萬 kWh 左右,線損約在 10%左右,基本滿足線路設計的線損要求,實際運行效果良好,達到了廠領導提出的“像運行產量一樣運行電量”的要求。
(2)多系統數據集成。采油廠用電管理系統的涉及的業務數據分散在不同系統庫中。目前油田油水井日度生產數據主要使用源頭數據庫存儲,實時數據采用現有 PCS 系統數據庫存儲,集輸相關數據使用采油廠自建的分隊計量系統庫存儲,注水相關數據采用油田統一搭建的 EPBP 系統庫存儲,電力相關數據由電力分公司管理和存儲。為了解決不同庫之間的數據差異問題,我們對相關業務數據進行統一歸集,通過 ETL 的方式,每天自動將不同業務系統的數據進行抽取、清洗轉換,然后加載到用電管理系統數據庫,從而將目前分散、零亂、標準不統一的數據整合到一起,為系統的決策提供分析依據。
由于軟件三層架構設計得當,并采取了有效的措施去解決設計中遇到的問題,用電管理系統最后按計劃完成并順利投入運行,不但保證了系統的開放性、可用性和互用性,取得了良好的經濟效益和管理效益,而且我的軟件三層架構設計得到了采油廠領導和廠、區兩級用戶的一致認同與稱贊,為系統的試運行打下了良好的基礎,該項目也獲得了當年度分公司科技進步創新一等獎。
在總結經驗的同時,我也看到了我在軟件三層架構設計中的不足之處:
首先:找標桿算法過于簡單。由于油田現有數據質量限制,存在很多空數據、假數據,我們的找標桿算法雖然在理論上經過驗證,但在實際應用過程中發現,四項以上的參數組合經常無法返回正確結果,這樣對需要參考對比結果的技術人員非常不友好。后續我們經過多次與相關關鍵客戶分析討論,終于確定了采用多項單參數最優的方式進行標桿篩選,獲得了相關客戶的認可和領導的肯定。
其次,數據庫層面存在很多無效的存儲過程與定時任務,對數據庫性能造成了影響。由于是在原系統基礎上開發的子系統,原系統中存在大量的存儲過程與定時任務,我們在用電管理系統開發過程中遇到過多次數據庫 session 過多造成的問題,如存儲過程無法編譯、數據庫無法訪問等。后續經過項目組的不懈努力,通過將大部分無效存儲過程進行重構整合,對定時任務進行重新分配的方式,解決這個困擾大家已久的難題。對于第一種情況,通過及時的分析溝通和對算法的優化,保證了中間層的業務邏輯處理的準確性和表現層結果視圖顯示的完整性,提高了用戶體驗質量,而第二種情況,對這種高水平高價值的遺留系統問題,我們采用了重構整合的方式進行了改造,保證了系統的延續性。為了更好地開展系統分析設計工作,我也將在以后的工作實踐中不斷地學習,提高自身素質和能力,為我國軟件事業貢獻自己微薄的力量。
.正則的歷史及由來
首先先來掃清一個誤區,老是有人認為正則表達式是javascript自己發明的,這當然是不正確的。在遙遠的1956年,一位名叫Stephen Kleene的數學家在McCulloch和pitts早期工作的基礎上,發表了一篇論文,講述的是神經元的表示方法。在這篇論文中第一次提出了了正則表達式的概念。所謂的正則表達式就是用來描述被他稱為“正則集的代數”的表達式,因此就取了“正則表達式”這個看似奇怪的名字。
在隨后的日子里,人們逐漸發現可以將正則表達式應用于使用ken Thompson的計算搜索算法的一些早期研究,Ken Thompson是Unix的主要發明人,第一個將正則表達式應用在應用程序上的就是Unix中的qed編輯器。從那個時候起直至現在正則表達式都是編輯器和搜索工具中的一個重要部分。
正則表達式的發展歷史其實并不是特別的長遠,但是推出之后卻迅速被各大編程語言所吸收采納。這主要得益于它自己的特點,我認為有以下三點。
第一,高效,相較于傳統的驗證方式,正則表達式可以更高效的完成需要做的驗證工作。
第二,捕獲字符串的能力強,正則可以很好的完成需求,比如截取url的域名或者其他的內容等等。
第三,表達靈活和寫法簡潔。從表單中復雜的各種驗證到對字符串的各種處理,都可以用正則表達式輕松實現。
二.正則表達式的定義
正則表達式是用來描述字符串匹配格式,可以用來檢索一個字符串中是否含有某種子字符串,并將匹配的子字符串做替換或者從某個串中取出符合某個條件的子字符串等。
正則表達式是由普通字符(a-z)以及特殊字符(也叫元字符)組成的文字模式。正則表達式就是一個模板,將這個模板與所搜索的字符串進行匹配。
2.1普通字符
由所有那些未顯示的指定為元字符的打印和非打印字符組成。這就包括了所有的大寫和小寫字符字符,所有數字,所有的標點符號以及一些符號。至于有哪些符號,我在這里就不說了,大家記住下面的特殊字符就可以了,因為除了特殊字符就是普通字符了。就跟考試的時候說及格或者不及格的時候一樣。我其實并不需要把每個人是不是考試的成績都告訴大家,我只需要說下沒及格的同學的名字,那沒念到名字的同學肯定就知道自己過了。
2.2特殊字符
所謂特殊字符,指的是在正則中有特殊含義的字符,比方說現在要查找“*.exe”中的.。但是.在正則中有特定的意思,表示的是表示除換行符(\n)以外的任何字符串的意思。那如果我們要查找文件名中帶有.的文件,就需要對.進行轉義,即在其前面加一個 \,表示起來就是\.。是不是很繞?別怕,在正則中特殊字符并不多,下面我會為大家一一列出。
正則表達式里的特殊字符$ ,( ) ,* , + , . ,[ , ? , \ , ^ , |
$匹配輸入的字符串的結尾位置。
()標記一個子表達式的開始和結束位置。
*匹配前面的子表達式零次或多次。
+匹配前面的子表達式一次或多次。
.匹配除換行符(\n)之外的任何單字符。
[標記一個中括號表示式的開始。
?匹配前面的子表達式零次或一次。
{標記限定表達式的開始。
\將下個字符標記為特殊字符,或原意字符,或向后引用,或八進制轉義符。
^匹配輸入字符串的開始位置,除非在方括號表達式中使用,此時它表示不接受該字符集合。
|指明兩項之間的一個選擇。
2.3限定符
限定符用來指定正則表達式的一個給定的內容必須要出現多少次才能滿足匹配。一共有*,+,?,{n},{n,},{n,m}共6種。
*匹配前面的子表達式零次或多次.
+匹配前面的自表達式一次或多次,?匹配前面的子表達式零次或一次。
{n} n是一個非負整數,匹配確定的n次。
{n,}n是一個非負整數,至少匹配n次。
{n,m}m和n均為非負整數,且n<=m,最少匹配n次且最多匹配m次。
2.4定位符
用來描述字符串或單詞的邊界,^和$分別指字符串的開始和結束,\b描述單詞的前或后邊界,\B表示非單詞邊界,不能對定位符使用限定符。
好了,這就介紹完了,是不是覺得很easy?
三.正則表達式在web中的應用
正則表達式在web開發中的應用廣泛,可以進行數據格式的檢驗,替換指定文本,提取感興趣的文本內容等。
例如:驗證字符串中E-mail地址的合法性
郵件地址格式是“用戶名@域名”,對于用戶名,除了數字和字母外,有的允許有“-”,有的允許有“.”,也有的呢兩者都可,還有的甚至允許其他的特殊字符。對此我們只能根據具體情況判斷。文字中假設除字母和數字外還允許“.”“-”并且“.”“-”不能出現在首末位。“,”“.”“-”不能相連。域名中各段除數字和字母外只允許出現”-”且不能不出現在首位和末位,各段用“.”連接,我們可以從域名得知最后一段大于一位且只有字母,根據以上內容我們可以寫出表達式倆判斷該串是否是合法的郵件地址。
是不是感覺很麻煩,光聽規則就感到頭疼?別急,分部解釋如下:
^:匹配開始
([a-z0-9A-Z]+[-|\.]?)+:數字或字母大于一位,“-”或”.“以上組合重復1次以上。
[a-z0-9A-Z]:用戶名以數字或字母結尾。
@:匹配“@”[a-z0-9A-Z]+匹配多位數字或字母
(-[a-z0-9A-Z]+)?:匹配一加多位數字或字母0次或1次。
\.:匹配”.”
+:匹配括號內的內容多次
[a-zA-Z]{2,}匹配字母2次以上
$:匹配結尾把上面的各項組合一起,就可以匹配一個比較全面的郵件地址,正則表示式如下:
^([a-z0-9A-Z]+[-|\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\.)+[a-zA-Z]{2,}$
復雜么?整個來看確實還蠻復雜的,但當你把功能分開,先逐個實現,再組合在一起,其實也沒那么復雜吧。
千鋒“HTML5”訓練營是全國最好的全棧工程師和架構師的培訓基地,“正則表達式”是目前課程體系(V6.5)高級部分的核心課程之一。
全棧工程師需要懂正則來做各種表單驗證,字符串處理,架構師也要懂正則表達式,因為框架中都會用到正則表達式。那么,根據前文提到的,正則表達式理所當然是我們必須學會的語言之一。千鋒HTML5的正則表達式項目開發課程有啥特點呢?最大的特點就是突出實用和高效。在精通前端的基礎上學習正則表達式,能夠更好的站在更高的層次去思考和學習正則表達式。
正則表達式項目開發課程如何講授呢?主要突出以下幾點:
第一,循序漸進。本課程先從基礎講起,先讓學生熟悉更種字符串操作,掌握字符串的驗證方式。然后結合實際,找一個實際的在線項目,然后分析驗證的方式和方法,介紹正則表達式并講解正則的基本語法,常見符號。
第二,項目驅動。全程以項目來驅動知識點的學習,在了解實際的需求后,用正則表達式實現之前在線項目的驗證需求。
第三,注重實戰。學生在聽完講師的課堂面授后,給學生找個具體的項目,要求學生親自動手完成驗證的需求,從而在實際中體會正則的好處。
四.結語
正則表達式語法簡潔,功能強大,特別在對數據的驗證問題上,在日常數據處理與軟件開發中,正則表達式也已成為不可缺少的工具,相信隨著web的發展,正則表達式的應用會越來越強大越來越易使用。
(文章轉載自“扣丁學堂”公眾號)
*請認真填寫需求信息,我們會在24小時內與您取得聯系。