JunXiu

          2010年11月1日

          為了解答“正則表達式(/[^0-9]/g,'')中的"/g"是什么意思?”這個問題,也為了能夠便于大家對正則表達式有一個更為綜合和深刻的認識,我將一些關鍵點和容易犯糊涂的地方再系統總結一下。

          總結1:附件參數g的用法

          表達式加上參數g之后,表明可以進行全局匹配,注意這里“可以”的含義。我們詳細敘述:

          1)對于表達式對象的exec方法,不加入g,則只返回第一個匹配,無論執行多少次均是如此,如果加入g,則第一次執行也返回第一個匹配,再執行返回第二個匹配,依次類推。例如
          var regx=/user\d/;
          var str=“user18dsdfuser2dsfsd”;
          var rs=regx.exec(str);//此時rs的值為{user1}
          var rs2=regx.exec(str);//此時rs的值依然為{user1}
          如果regx=/user\d/g;則rs的值為{user1},rs2的值為{user2}
          通過這個例子說明:對于exec方法,表達式加入了g,并不是說執行exec方法就可以返回所有的匹配,而是說加入了g之后,我可以通過某種方式得到所有的匹配,這里的“方式”對于exec而言,就是依次執行這個方法即可。

          2)對于表達式對象的test方法,加入g于不加上g沒有什么區別。

          3)對于String對象的match方法,不加入g,也只是返回第一個匹配,一直執行match方法也總是返回第一個匹配,加入g,則一次返回所有的匹配(注意這與表達式對象的exec方法不同,對于exec而言,表達式即使加上了g,也不會一次返回所有的匹配)。例如:
          var regx=/user\d/;
          var str=“user1sdfsffuser2dfsdf”;
          var rs=str.match(regx);//此時rs的值為{user1}
          var rs2=str.match(regx);//此時rs的值依然為{user1}
          如果regx=/user\d/g,則rs的值為{user1,user2},rs2的值也為{user1,user2}

          4)對于String對象的replace方法,表達式不加入g,則只替換第一個匹配,如果加入g,則替換所有匹配。(開頭的三道測試題能很好的說明這一點)

          5)對于String對象的split方法,加上g與不加g是一樣的,即:
          var sep=/user\d/;
          var array=“user1dfsfuser2dfsf”.split(sep);
          則array的值為{dfsf, dfsf}
          此時sep=/user\d/g,返回值是一樣的。

          6)對于String對象的search方法,加不加g也是一樣的。

          總結2:附加參數m的用法

          附加參數m,表明可以進行多行匹配,但是這個只有當使用^和$模式時才會起作用,在其他的模式中,加不加入m都可以進行多行匹配(其實說多行的字符串也是一個普通字符串),我們舉例說明這一點

          1)使用^的例子
          var regx=/^b./g;
          var str=“bd76 dfsdf
          sdfsdfs dffs
          b76dsf sdfsdf”;
          var rs=str.match(regx);
          此時加入g和不加入g,都只返回第一個匹配{bd},如果regx=/^b./gm,則返回所有的匹配{bd,b7},注意如果regx=/^b./m,則也只返回第一個匹配。所以,加入m表明可以進行多行匹配,加入g表明可以進行全局匹配,綜合到一起就是可以進行多行全局匹配

          2)使用其他模式的例子,例如
          var regx=/user\d/;
          var str=“sdfsfsdfsdf
          sdfsuser3 dffs
          b76dsf user6”;
          var rs=str.match(regx);
          此時不加參數g,則返回{user3},加入參數g返回{user3,user6},加不加入m對此沒有影響。

          3)因此對于m我們要清楚它的使用,記住它只對^和$模式起作用,在這兩種模式中,m的作用為:如果不加入m,則只能在第一行進行匹配,如果加入m則可以在所有的行進行匹配。我們再看一個^的例子
          var regx=/^b./;
          var str=“ret76 dfsdf
          bjfsdfs dffs
          b76dsf sdfsdf”;
          var rs=str.match(regx);
          此時rs的值為null,如果加入g,rs的值仍然為null,如果加入m,則rs的值為{bj}(也就是說,在第一行沒有找到匹配,因為有參數m,所以可以繼續去下面的行去找是否有匹配),如果m和g都加上,則返回{bj,b7}(只加m不加g說明,可以去多行進行匹配,但是找到一個匹配后就返回,加入g表明將多行中所有的匹配返回,當然對于match方法是如此,對于exec呢,則需要執行多次才能依次返回)

          總結3:在HTML的textarea輸入域中,按一個Enter鍵,對應的控制字符為“\r\n”,即“回車換行”,而不是“\n\r”,即“換行回車”,我們看一個前面我們舉過的例子:
          var regx=/a\r\nbc/;
          var str=“a
          bc”;
          var rs=regx.exec(str);
          結果:匹配成功,rs的值為:{ },如果表達式為/a\n\rbc/,則不會被匹配,因此在一般的編輯器中一個”Enter”鍵代表著“回車換行”,而非“換行回車”,至少在textarea域中是這樣的。

          posted @ 2010-12-30 17:45 junlin 閱讀(199) | 評論 (0)編輯 收藏

          作在工作中,經常需要遠程連接到服務器上,然而在公司里,老總、同事都需要連接到服務器上的,而默認的Win2003操作系統最大連接數是2,這樣一來,問題也就來了,常常遇到“終端服務器超出最大連接數”,導致無法正常登陸服務器。下面講解在網上流傳的幾種方法,來解決這一問題。

          解決方法一:用“注銷”方式退出遠程桌面,而不是直接關閉窗口;

          解決方法二:踢出已經斷開的連接用戶;

          1、首先通過各種方法連接到服務器上(telnet);

          2、上去后,查看登陸用戶列表。輸入命令:query user;

          這樣你就可以看出有何不同來啦,可以根據你的具體情況而定的。ID為0的用戶就是本地登陸的,而在State中看提示,當提示為已斷開,則說明用戶已經斷開還占用著系統資源和通道,這樣就可以把該用戶踢掉。輸入logoff ID,即踢除相應ID的用戶。

          解決方法三:限制已斷開連接的會話存在時間;(推薦)

          一般情況下,我們在維護遠程服務器時,不可能長時間在線,但是系統默認的卻是只要登錄就不再斷開。因此,我們可以修改這一默認設置,給它指定一個自動斷開的時間即可。

          可以在 Windows 2003 服務器上通過組策略中設置一下來解決問題:單擊“開始 → 運行”,輸入“gpedit.msc”,回車后打開組策略窗口,然后依次定位到“計算機配置 → 管理模板 → Windows 組件 → 終端服務 → 會話”,然后在右側窗口中雙擊“為斷開的會話設置時間限制”,在打開的窗口中將“結束斷開連接的會話”時間設置為5分鐘,或者設置為空閑就斷開。或在遠程服務器上打開“運行”窗口,輸入“tscc.msc”連接設置窗口。然后雙擊“連接”項右側的“RDP-Tcp”,切換到“會話”標簽,選中“替代用戶設置”選項,再給“結束已斷開的會話”設置一個合適的時間即可。

          解決方法四:增加連接數量,即設置最大連接數再多些;

          默認情況下允許遠程終端連接的數量是2個用戶,我們可以根據需要適當增加遠程連接同時在線的用戶數。

          單擊“開始→運行”,輸入 “gpedit.msc”打開組策略編輯器窗口,依次定位到“計算機配置 → 管理模板 → Windows 組件 → 終端服務”,再雙擊右側的“限制連接數量”,將其TS允許的最大連接數設置大一些即可。

          經過上面兩個配置(方法三&方法四),基本上就可以保證遠程終端連接時不再受限。但仍有人反映,當前同時只有一個用戶進行連接,卻提示超出最大允許鏈接數,這又是什么原因呢?出現這種情況是因為操作不當所造成的。在上一個帳戶登錄遠程桌面后退出時,沒有采用注銷的方式,而是直接關閉遠程桌面窗口,那么導致該會話并沒有被釋放,而是繼續保留在服務器端,占用了連接數,這樣就會影響下一個用戶的正常登錄了。

          解決方法五:限制用戶會話數;

          對Terminal Services進行限制,使得一個用戶僅僅能夠連接一次。對于Windows Server 2003,請在Terminal Services Configuration(Terminal Services配置)中將“限制每位用戶只有擁有一個會話”(Restrict each user to one session)設置為“是”(Yes)。此外,您可以將“限制終端服務用戶使用單個遠程會話”組策略設置為“啟用”。

          注意:版本不一樣解決的方法有異!

          A:這是因為Windows 2003中設置了最大允許連接數限制,而你每次連接后可能沒有注銷而是直接關閉,導致連接數超過了最大連接數。你可以在Windows 2003 服務器上通過組策略中設置一下來解決問題:單擊“開始→運行”,輸入 “gpedit.msc”,回車后打開組策略窗口,然后依次定位到“計算機配置 → 管理模板 → 終端服務 → 會話”,然后在右側窗口中雙擊“為斷開的會話設置時 間限制”,在打開的窗口中將“結束斷開連接的會話”時間設置為5分鐘。最好的解決方法還是你每次斷開連接時通過注銷的方式。

          B:經常多人管理服務器的朋友一定遇到過當自己終端連接遠程計算機的時候卻提示“終端連接超出了最大連接”的提示吧?這是因為windows2003僅支持2個終端用戶的登陸。當這種情況出現后,多數人選擇的是給機房打電話進行重啟服務器。可是帶來的損失也是顯而 易見的。那么我們有什么辦法來解決呢?方法當然是有的。我們只需要在一臺2003的機器上運行“tsmmc.msc”就可以打開遠程桌面連接,在這里我們 添加一個新的連接,輸入對方的IP地址帳號和密碼后就可以成功登陸到對方的桌面中,這時可以再踢下一個用戶。就可以解決終端連接數超過最大的問題。

          C:開始 → 控制面版 → 授權里面更改連接數。

           

          在命令行:
          mstsc /console /v:你的服務器IP:遠程端口

          例如 :mstsc /console /v:222.222.215.222:3389

          win2K/win2003終端服務器超出最大允許連接數解決之道全攻略
          原因:用遠程桌面鏈接登錄到終端服務器時經常會遇到“終端服務器超出最大允許鏈接數”諸如此類錯誤導致無法正常登錄終端服務器,引起該問題的原因在于終端服務的缺省鏈接數為2個鏈接,并且當登錄遠程桌面后如果不是采用注銷方式退出,而是直接關閉遠程桌面窗口,那么實際上會話并沒有釋放掉,而是繼續保留在服務器端,這樣就會占用總的鏈接數,當這個數量達到最大允許值時就會出現上面的提示。
          如何避免?
          一、用注銷來退出遠程桌面而不是直接關閉窗口二、限制已斷開鏈接的會話存在時間
          1、從終端服務配置中修改
          運行-Tscc.msc(終端服務配置)-連接-雙擊RDP-Tcp或右擊-屬性-會話-選中第一個的替代用戶設置(O)-結束已斷開的會話[將默認值“從不”改為一個適當的時間,比如30分鐘]
          2、從組策略修改
          開始-運行-gpedit.msc-計算機配置-管理模板-windows組件-終端服務-會話
          右邊窗口選擇 為斷開的會話設置時間限制 -選擇已啟用,選擇一個時間
          三、增加最多鏈接數
          1、從終端服務配置中修改:運行-Tscc.msc(終端服務配置)-連接-雙擊RDP-Tcp或右擊-屬性,選擇“網卡”選項卡-修改“最大連接數”改成你所需的值,當然這個值不也能太大,否則會占用較多的系統資源。不過這里修改的值好像不起作用,設置成無限制時照樣還是會出現本文所說的情況。  
          2、組策略級別要高于終端服務配置,當啟用組策略后終端服務配置中的相應選項會變成灰色不可修改
          運行-gpedit.msc-計算機配置-管理模板-Windows組件-終端服務
          雙擊右邊的”限制連接數量“-選擇”已啟用“-填入允許的最大連接數
          四、改變遠程終端模式
          打開“控制面板”,雙擊“添加刪除程序”,單擊“添加刪除Windows組件”,“組件”,在Windows組件向導對話框中選中“終端服務” , “下一步”,“應用服務器”,“下一步”,然后按照提示即可改變終端服務的模式。  
          Windows 2000終端服務有2種運行模式: 遠程管理模式和應用程序服務器模式。遠程管理模式允許系統管理員遠程管理服務器,而且只允許2個終端會話同時登錄終端服務器。應用程序服務器模式允許用戶運行一個以上應用程序,允許多個用戶從終端登錄訪問服務器。但是,應用終端服務的用戶必須有終端服務授權,即必須在90天之內在這個域或工作組中設置終端服務授權服務器,否則用戶需刪除應用程序,然后再重新安裝。
          五、修改本地安全策略
          控制面板>>管理工具>>本地安全策略>>本地策略>>安全選項>>
          1、先找到>>Microsoft網絡服務器:在掛起會話之前所需的空閑時間
          默認為:15分鐘,改為自己所需要的時間(就是登陸后無動作空閑超過多少時間后自動斷開)
          2、然后找到>>網絡安全:在超過登錄時間后強制注銷。默認為:已禁用,一定要改為:已啟用
          如果已經發生解決辦法:
          1、首先你可以telnet到此主機上(不管你用哪種方法),當然如果能直接操作機器更好,不過直接操作就不必用命令行了,那當然是知道機器超級管理員的密碼的情況下,可以使用OpenTelnet來打開遠程服務器的Telnet端口。
          2、Telnet上去后,先看登陸的用戶:
          輸入命令:query user
          系統返回:
          C:>query user
          USERNAME        SESSIONNAME     ID    STATE     IDLE TIME    LOGON TIME
          k12update       console         1     運行中         2007-3-14 14:57
          此時可以看出的可能都不一樣,根據具體情況而定。
          ID 0 的用戶是本地登陸的,ID 1 和 ID 12是3389登陸的用戶,前者在運行中,后者已經斷開了,但是斷開了仍然占用系統資源和通道,我們要把它踢掉。如下進行操作即可。
          輸入命令:logoff 1
          3、如果服務器關閉了telnet功能(這是默認的),還可以通過SqlServer的xp_cmdshell擴展存儲過程,使用格式:master.dbo.xp_cmdshell '命令內容',其余可參考第二步。此方式要求有訪問xp_cmdshell的權限
          上面的辦法基本沒有用

          [原創經典]“終端服務器超出了最大允許連接數”的解決辦法

          2007-04-25 17:13

          現象及原因:用遠程桌面連接登錄到終端服務器時經常會遇到“終端服務器超出最大允許連接數”諸如此類錯誤導致無法正常登錄終端服務器,引起該問題的原因在于Windows Server 2003中設置終端服務的缺省連接數為2個鏈接,并且當登錄遠程桌面后如果不是采用注銷方式退出,而是直接關閉遠程桌面窗口,那么實際上會話并沒有釋放掉,而是繼續保留在服務器端,這樣就會占用總的鏈接數,當這個數量達到最大允許值時就會出現上面的提示。
          解決方案:
          法一:用“注銷”方式退出遠程桌面而不是直接關閉窗口
          法二:踢出已經斷開連接的用戶
          1、首先telnet到此主機上(不管你用什么方法),當然如果能直接操作機器更好,不過直接操作就不必用命令行了,用控制臺更直觀(略過)。
          2、Telnet上去后,先看登陸的用戶:
          輸入命令:query user 系統返回:
          用戶名Username      會話名Session Name      ID   狀態State    空閑時間Idle Time     登錄時間Logon Time
          administrator            console                               0   運行中               .                           2007-1-12 10:24
          lucy                                                                           1   唱片            無                            2007-1-12 10:35
          >administrator         rdp-tcp#35                      2   已斷開               .                          2007-1-25 18:09
          此時可以看出的可能跟我的不一樣,根據你的具體情況而定。
          ID 0 的用戶是本地登陸的
          ID 1 和 ID 2是3389登陸的用戶,前者在運行中, 后者已經斷開了,但是斷開了仍然占用系統資源和通道,我們要把它踢掉,如下進行操作即可。
          輸入命令:logoff 1
          再看看
          C:\Documents and Settings\Administrator.AD>query user
          用戶名Username      會話名Session Name      ID   狀態State    空閑時間Idle Time     登錄時間Logon Time
          administrator          console                                0   運行中               .                          2007-1-12 10:24
          >administrator       rdp-tcp#35                       2   已斷開               .                          2007-1-25 18:09
          3、如果服務器關閉了telnet功能(這是默認的),還可以通過SqlServer的xp_cmdshell擴展存儲過程,使用格式:master.dbo.xp_cmdshell ''''命令內容'''',其余可參考第二步。此方式要求有訪問xp_cmdshell的權限。
          法三(最佳方法-推薦):限制已斷開鏈接的會話存在時間
          一般情況下,我們在維護遠程服務器時,不可能長時間在線,但是系統默認的卻是只要登錄就不再斷開。因此,我們可以修改這一默認設置,給它指定一個自動斷開的時間即可。
          可以在Windows 2003 服務器上通過組策略中設置一下來解決問題:單擊"開始→運行",輸入"gpedit.msc",回車后打開組策略窗口,然后依次定位到"計算機配置→管理模板→Windows 組件→終端服務→會話",然后在右側窗口中雙擊"為斷開的會話設置時間限制",在打開的窗口中將"結束斷開連接的會話"時間設置為5分鐘,或者設置為空閑就斷開。

          在遠程服務器上打開“運行”窗口,輸入“tscc.msc”連接設置窗口。然后雙擊“連接”項右側的“RDP-Tcp”,切換到“會話”標簽,選中“替代用戶設置”選項,再給“結束已斷開的會話”設置一個合適的時間即可。
          法四:增加連接數量,即設置可連接的數量多些
          默認情況下允許遠程終端連接的數量是2個用戶,我們可以根據需要適當增加遠程連接同時在線的用戶數。
          單擊“開始→運行”,輸入“gpedit.msc”打開組策略編輯器窗口,依次定位到“計算機配置→管理模板→Windows 組件→終端服務”,再雙擊右側的“限制連接數量”,將其TS允許的最大連接數設置大一些即可。
          經過上面兩個配置(法三&法四),基本上就可以保證遠程終端連接時不再受限。但仍有人反映,當前同時只有一個用戶進行連接,卻提示超出最大允許鏈接數,這又是什么原因呢?出現這種情況是因為操作不當所造成的。在上一個帳戶登錄遠程桌面后退出時,沒有采用注銷的方式,而是直接關閉遠程桌面窗口,那么導致該會話并沒有被釋放,而是繼續保留在服務器端,占用了連接數,這樣就會影響下一個用戶的正常登錄了。
          法五:限制用戶會話數
          對Terminal Services進行限制,使得一個用戶僅僅能夠連接一次
          對于Windows Server 2003,請在Terminal Services Configuration(Terminal Services配置)中將“限制每位用戶只有擁有一個會話”(Restrict each user to one session)設置為“是”(Yes)。此外,您可以將“限制終端服務用戶使用單個遠程會話”組策略設置為“啟用”。

           

          本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/62guangye/archive/2010/02/05/5291415.aspx

          posted @ 2010-11-01 17:06 junlin 閱讀(1400) | 評論 (0)編輯 收藏

          導航

          <2010年11月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          統計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 陆河县| 名山县| 江华| 铁力市| 高陵县| 利津县| 富川| 海林市| 江永县| 日土县| 诸暨市| 合山市| 锦屏县| 福海县| 瓦房店市| 庆阳市| 高陵县| 渭南市| 锦屏县| 三门峡市| 梁山县| 荣成市| 卓资县| 区。| 尼木县| 安岳县| 昌图县| 巴青县| 隆回县| 高阳县| 思茅市| 巴彦县| 龙里县| 怀仁县| 英山县| 贡嘎县| 广河县| 望奎县| 江都市| 湘潭市| 崇左市|