Home Php C# Sql C C++ Javascript Python Java Go Android Git Linux Asp.net Django .net Node.js Ios Xcode Cocoa Iphone Mysql Tomcat Mongodb Bash Objective-c Scala Visual-studio Apache Elasticsearch Jar Eclipse Jquery Ruby-on-rails Ruby Rubygems Android-studio Spring Lua Sqlite Emacs Ubuntu Perl Docker Swift Amazon-web-services Svn Html Ajax Xml Java-ee Maven Intellij-idea Rvm Macos Unix Css Ipad Postgresql Css3 Json Windows-server Vue.js Typescript Oracle Hibernate Internet-explorer Github Tensorflow Laravel Symfony Redis Html5 Google-app-engine Nginx Firefox Sqlalchemy Lucene Erlang Flask Vim Solr Webview Facebook Zend-framework Virtualenv Nosql Ide Twitter Safari Flutter Bundle Phonegap Centos Sphinx Actionscript Tornado Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 3

20
votes
answers
18 views
+10

JavaScript用*替换前5个字符

我需要Javascript Regex来替换前5个字符。以下是一些例子。第一行是输入,第二行是预期输出。你能告诉我如何实现这个目标吗?

我试过了。但是如果输入小于4,它们都不起作用。

 。{5}到*****和^ d {5}到*****   

示例

  123456789 XXXXX6789 123 XXX 123456 XXXXX6 1 X 12345 XXXXX  
    
        
沙发
+40

你的第一个正则表达式需要一点调整,这应该有效。

  let reg = /.{1,5}/ let string ='123456789'; let string2 ='123'; console.log(string.replace(reg,(m)=>“X”.repeat(m.length))); console.log(string2.replace(reg,(m)=>“X”.repeat(m.length)));    

     
			
        
板凳
+40

您可以在 .replace()中使用回调函数或lambda:

 < code> var arr = ['123456789','123','123456','1','12345']; arr.forEach(el =&gt; console.log(el,'::',el.replace(/ ^ d {1,5} /,m =&gt; m.replace(/ d / g,'X') )))   

     
			
        
地板
+30

如果你不是在寻找正则表达式解决方案,那么你也可以尝试这个选项。基于substring()方法的替代方法

  function replace_String(string,numberofchar,chartoreplace){return string.substring(0,numberofchar).split(”“)。map(ele =&gt; ele = chartoreplace).join(”“ ).concat(string.substring(numberofchar,string.length))} console.log(replace_String(“123456789”,5,“X”))console.log(replace_String(“1”,1,“*”))   

     
			
        
4楼
+30

你可以做很多方法。一个是两个替换语句

  const hideFive = str =&gt; str.replace(/ ^ d {1,5} /,x =&gt; x.replace(/./ g,'*'))var tests = [“1”,“12”,“123”,“1234 “,”12345“,”123456“,”1234567“,”12345678“,”1234567890“] tests.forEach(val =&gt; console.log(val,'=',hideFive(val)))    

没有胖箭

<

5楼
+30

你可以替换第一个字符并取出字符串的切片。

  const replaceFirst5 = s =&GT; '*'。repeat(Math.min(5,s.length))+ s.slice(5); 的console.log(replaceFirst5( “123456789”)); console.log(replaceFirst5(“123”));    

     
			
        
6楼
+30

您可以使用 replace repeat

  ^。{1,5}   
  • ^ - 字符串开头
  • 。{1,5} - 匹配除新行以外的任何内容,最少一次,最多5次< / li>

      let replaceFirst5 =(str)=&gt; {return str.replace(/ ^。{ 1,5} /,m =&gt;“X”.repeat(m.length))} console.log(replaceFirst5(“123456789”))控制台。log(replaceFirst5(“123”))   
    
         
    			
            

    它使用解构将部分返回值分配给现有标识符主体和客户。 - jonrsharpe 8月28日9:25

    @jonrsharpe可能值得指出,只有客户被破坏.. - Keith 8月28日9:34

7楼
0

假设这些数字包含在名为“数字”的类中

jQuery代码

  $。each('。numbers' ,function(){let num = $(this).text(); var j =“”; for(let i = 0; i&lt; num.length; i ++){if(i == 5){break;} j + =“*”;} var res = str.replace(num.substring(0,5),j); document.getElementById(“demo”)。innerHTML = res;});  
     
			
        
0
votes
answers
11 views
+10

過濾正則表達式大寫和數字0

-1

我需要其的恰好48個字符長度的uppercase字符和在它mandatory number 0(1次以上)的字符串相匹配的正則表達式。過濾正則表達式大寫和數字0

我想用它來過濾這些字符串。

例如:

敏捷的棕色狐狸AUSGKAJDGAYGDKJAS GDKJAGDJKASGDKJASGDKYQGWUDVAS 躍過柵欄

+0

大多數方言支持'[A-Z] {} 48 0 *',你真的不問前谷歌?另請參閱[標籤說明](https://stackoverflow.com/tags/regex/info),它告訴您需要在問題中包含什麼內容。另外,如果零重複是可接受的,則0不是強制性的。 – tripleee

+0

不,這不起作用。這匹配48個字符沒有0.我需要它匹配如果字符串_contains_ ** 0 ** – laszlo

+0

然後你不是真的意思是「零或更多」。請查看標籤指南和[編輯]您的問題,以便回覆。 – tripleee

沙发
0
0

此正則表達式您想要的模式匹配:

(?=.{48})[A-Z0]*0[A-Z0]* 

this regex demo

說明:

  • 正則表達式(?=.{48})的第一部分確保了充分的匹配將是恰好48個字符
  • 第二部分[A-Z0]*0[A-Z0]*是實際的圖案,匹配任何大寫字符或0並確保內部至少有一個0。
+0

嘿保羅,我想還可以使用它在谷歌文檔,和我剛剛得知自己的正則表達式(RE2)不支持積極的向前看符號。我搜索了re2的替代品,但似乎這是不可能的。你能否想到其他解決方案而不使用積極的lookahead?謝謝 – laszlo

+0

如果沒有積極的向前看,我想不出一種方法,對不起:x –

0
votes
answers
25 views
+10

使用REGEXP和字典中的令牌在UIMA中創建註釋

1

我需要使用正則表達式和字典中的標記標記註釋。這是我的規則使用REGEXP和字典中的令牌在UIMA中創建註釋

ANY {REGEXP(「new」),Book.names.ct ==「personal book」 - > MARK(NewPersonalBook)};

具有與下面的輸入工作:

  1. 新的個人書申請
  2. 打開一個新的個人書

的PROGRAMM顯示了在代碼中沒有錯誤,但它不標註註釋「NewPersonalBook」作爲輸入。 如何解決這個問題?

+1

我覺得問題可能是第二個條件,它試圖解決與類型ANY匹配註釋相同的偏移類型註釋。如果它不是textspan「新」,那麼Book annoation可能會更大。所以條件不符。你能否擴展這個例子? 'b:Book {b.names.ct ==「personal book」,REGEXP(。* new。*) - > NewPersonalBook};' –

沙发
0
0

我不知道如果我理解你的情況,但我試圖複製你想要做

我創建了一個單詞表

personal book, nicebook

然後,我有我的文字例如什麼

new personal book application. open a new personal book. my new nicebook is nice.

腳本

 
WORDLIST BooksList = 'books.txt'; 

DECLARE Book, NewBook; 

Document{-> MARKFAST(Book, BooksList)}; 
W{REGEXP("new")} Book.ct == "personal book" {-> MARK(NewBook, 1, 2)}; //if you want to test a specific text 
W{REGEXP("new")} Book {-> MARK(NewBook, 1, 2)}; //this will annotate NewBook for a books with the word new before it 

如果你不想在 「新」 字的Wi您需要刪除整數參數的註釋(因爲它們表示您想要覆蓋的範圍,在這種情況下,第一個匹配的文本是「新」,第二個是書本文本)

聲明:我是新UIMA RUTA,希望這可以幫助

0
votes
answers
33 views
+10

如何匹配捕獲組1的正則表達式

-1

我的目標是捕獲來自以下字符串日期:如何匹配捕獲組1的正則表達式

<span class="ui_bubble_rating bubble_50"></span><span class="ratingDate relativeDate" title="November 9, 2017">Reviewed 2 days ago </span><a class="viaMobile" href="/apps" target="_blank" onclick="ta.util.cookie.setPIDCookie(24487)"><span class="ui_icon mobile-phone"></span>via mobile </a>

要做到這一點我使用正則表達式:title="(*?)" 它返回匹配(組0):title="November 9, 2017"組1:November 9, 2017

我需要我的匹配返回正則表達式只是日期,什麼是當前組1。有沒有一種簡單的方法來做到這一點?我是新來的正則表達式,但我可以在這個網上找到方向。

注意:我不會爲日期的結構編寫正則表達式,因爲某些字符串有多個日期,我只希望標題中的日期。謝謝!

+1

您使用哪種語言?這將決定你如何獲得捕獲組。 – user184994

+0

猜測:您正在使用Java,然後查看[文檔](https://docs.oracle.com/javase/7/docs/api/java/util/regex/Matcher.html#group(int)): 「...零組表示整個模式...」 – alfasin

+0

我正在使用Python。我想知道是否有可能在正則表達式中做到這一點。實施是否要求使用任何相關的母語? – hackerman

沙发
0
0

您可以使用負前瞻/回顧後,而不是捕捉組

(?<=title=").+?(?=") 

這將確保它的標題開始,而實際上沒有選擇它

板凳
0
0

您可以使用re.findall

import re 
s = """ 
    <span class="ui_bubble_rating bubble_50"></span><span class="ratingDate relativeDate" title="November 9, 2017">Reviewed 2 days ago </span><a class="viaMobile" href="/apps" target="_blank" onclick="ta.util.cookie.setPIDCookie(24487)"><span class="ui_icon mobile-phone"></span>via mobile </a> 
    """ 
date = re.findall('title="(.*?)"', s)[0] 

輸出:

'November 9, 2017' 
0
votes
answers
32 views
+10

正則表達式並不總是使用尖括號

1

因此,在Java中編寫Brainfuck翻譯程序的過程中,我需要按照下列規則拆分字符串:任何[ ] , .字符或任何+ - < >的序列後面都應該換行符。這裏的輸入字符串:正則表達式並不總是使用尖括號

..-<[-]>..[[<<[+[-<-->>+,>-.++]-,>,<[.],][<.,<-]+[-,<->,-]<<[>->-.<-[.<++,>++,].-]]] 

而且我的代碼:

s = s.replaceAll("(\+|-|<|>)+", "$0
") 
.replaceAll("\.|\,|\[|\]", "$0
"); 

而結果(SO不會讓這種這裏):https://pastebin.com/ZaT8d5ve 什麼預期:https://pastebin.com/gNxcgTSP 似乎支架的連接帶有正負號的錯誤,而帶方括號和點/逗號的尖括號可以。我真的不明白,我的解決方案有什麼問題?

沙发
0
3

你的輸出做了你描述的到底是什麼,的+-<>序列之後 所以-<成爲-< - <

如果我理解正確,你要分割的相同的字符要麼是+-<>後有 序列。如果是這樣的話,那麼代替

s.replaceAll("(\+|-|<|>)+", "$0
") 

可以使用

s.replaceAll("(\+|-|<|>)\1*", "$0
") 

1是反向引用從組1(這裏(\+|-|<|>))相匹配,所以它相匹配的角色之一,其可選擇以下重複。

板凳
0
2

你似乎認爲

(\+|-|<|>)+ 

將匹配像++相同的字符序列只,而這也是這些字符,如-<-->>的任何序列匹配。

你也不需要依次使用兩個正則表達式。以下應該做的:

s = s.replaceAll("([+<>-])\1*|[,.\[\]]", "$0
"); 
0
votes
answers
23 views
+10

如何使用AND運算

0

,因爲我很新的使用這個組合兩個正則表達式我有一個兩難的使用正則表達式:如何使用AND運算

我有下面的網址:

var url = https://website.com/something-here/page.html?p=null#confirmation?order=123 

我期望的結果是:

/something-here/page.html #confirmation 

這可能是一個空格或逗號或簡單地將二者結合起來(/something-here/page.html#confirmation)

我可以做到這一點使用兩個正則表達式如下:

var a= url.match(/som([^#]+).html/)[0]; 

var b= url.match(/#([^#]+).tion/)[0]; 

console.log(a,b); 

但我想它作爲具有相同結果的單正則表達式來完成。

我希望你能幫助我。它驅使我瘋狂尋找答案。 。:(

感謝

+1

爲什麼一個正則表達式,如果兩個正則表達式你需要什麼? – Teemu

+0

1.你的最終目標是你的正則表達式的目的是什麼?使用。 2.這是什麼空間? –

+0

我想嘗試將它們結合起來,或者至少創建一個單一的regEx作爲我試圖創建的表單上的一個字段* should *只接受單線程正則表達式。 :( 我試過這種格式^(?=。* some)(?=。*#)但它不起作用 空間只是分開兩個,但它並不是一個真正的因素。他們可以用逗號連在一起,也可以合併爲一個單詞。 –

沙发
0
-1

使用範圍每個條件「()」的更多細節回答嘗試找到here

板凳
0
0

您可以使用正則表達式的集羣系統,你的優勢在這裏是一個片段:

var matches = url.match(/(som[^#]+.html).*?(#[^#]+.tion)/); 
console.log(matches[1] + " " + matches[2]); // prints /something-here/page.html #confirmation 

我將兩個RegExp條件組合成一個,同時用正確的區域括起來創建兩個組。這樣,您可以獲取指定的組並在其間添加空間。

+0

你好@Tals,我試圖運行它,但由於數組匹配,它給了我一個意想不到的錯誤。當我刪除它們時,它給了我一個空值。 我也試圖用[0]和[1]分別替換值,但仍然會出現相同的意外錯誤。 感謝您的建議。 :) –

+1

嗨Tals, 它的一個錯誤在我的最後,我正在運行它在另一張表,我用於測試哈哈。我很抱歉。這是正確的和正在運行。 –

+0

酷!祝你好運:) – Tals

地板
0
0

除了一個事實,即你的例子URL是錯誤的(你有兩個搜索PARAMS),因此不太適合一起工作 - 我擁有電子命題:

爲什麼不使用URL對象及其屬性?

url = new URL("https://website.com/something-here/page.html?p=null#confirmation?order=123"); 

,準確地抓住具有明確的語法屬性,如:

url.pathname;>> 「的東西,在這裏/ page.html中」

url.hash;>>「#confirmation訂單? = 123「

但是如果你明確的ne編一個RegExp變種

這裏是一個

var url = "https://website.com/something-here/page.html?p=null#confirmation?order=123"; 
 
var match = url.match(//som.*?html|#.*?tion/g); 
 

 
console.log(match.join(" "));

+0

嗨,Bekim,非常感謝你。我能夠運行它,現在它可以工作。非常感謝你的幫助!^_^ –

+0

@LeaSanchez太好了,(現在你應該把線程標記爲已解決,例如接受最適合你的答案)。 :) –

0
votes
answers
21 views
+10

R中的正則表達式來區分字符串中的男性/女性

0

我有我需要理清的性別描述的字符串。舉例來說,如果我有以下,R中的正則表達式來區分字符串中的男性/女性

string1 = "FEMALE AND FEMALE" 
string2 = "FEMALE AND MALE" 

我需要改變string1說「多名女性」,並string2說「男性和女性」。

使用gsub,由於MALE嵌套在FEMALE中,因此我無法編寫識別string2string1不同的替換。使用「YEP」作爲一個確認字符串第一,我已經試過,沒有運氣以下,

gsub(".*FEMALE.*MALE.*", "YEP", string1) 
gsub(".*FEMALE.*[^M]ALE.*", "YEP", string1) 
gsub(".*FEMALE.*[^]MALE.*", "YEP", string1) 
gsub(".*FEMALE.*(^MALE).*", "YEP", string1) 
gsub(".*FEMALE.*MALE.*", "YEP", string2) 
gsub(".*FEMALE.*[^M]ALE.*", "YEP", string2) 
gsub(".*FEMALE.*[^]MALE.*", "YEP", string2) 
gsub(".*FEMALE.*(^MALE).*", "YEP", string2) 

我需要考慮通配符的順序,因爲不是所有的字符串將顯示爲「女性與女性」或「女性,男性「,有時他們顯示爲」1女12 MALES「或」B女2X女「等

任何想法如何處理嵌套字符串使用正則表達式?

+0

不是很確定你在尋找附加字符串的方式,你添加在你的文章的底部附近,但你可以使用像'(?:(((??1 D) d +)( ?: s * [az] b s *)* s +)?( b(?:FE)?MALES? b)'獲取您要查找的所有數據。 – ctwheels

沙发
0
0

好吧,我在發佈後立刻就明白了這一點。

運行gsub(".*FEMALE.*\b(M)ALE.*", "YEP", string1)結果爲"FEMALE AND FEMALE",而gsub(".*FEMALE.*\b(M)ALE.*", "YEP", string2)結果爲"YEP"。所以這個工作。

+0

不需要括號。 – Sneftel

0
votes
answers
37 views
+10

Python3:與CARRET或美元符號的正則表達式的代碼不匹配任何

0

有沒有人有一個想法,爲什麼一個正則表達式的代碼,完美的作品找到 shutil.move(),如果我在添加CARRET和美元符號未發現任何正則表達式代碼的開始和結束?Python3:與CARRET或美元符號的正則表達式的代碼不匹配任何

exampleRegex = re.compile (r'(shutil[.])(.*)()s)') --> finds all shutil functions 

exampleRegex = re.compile (r'^(shutil[.])(.*)()s)$') --> doesn't find anything 

謝謝!

+1

你也可以在這裏分享你正在測試這些正則表達式的字符串嗎?這將有助於:) – Adriano

+0

[無法重現](https://stackoverflow.com/help/mcve)。我可以建議的唯一的事情是,你使用的是一個包含超過'shutil .'的字符串,後面跟着任何東西,然後是')'(最後的空格可以是任何空格字符)。你確定你的琴絃和你描述的一樣嗎?另外,假設這是一個多行文件/輸入,你是否啓用了多行'm'修飾符?除了這些建議之外,如果沒有實際的投入,我們無法提供任何進一步的幫助。 – ctwheels

+0

您是否嘗試過使用常規字符串並將反斜槓加倍? – user1459519

沙发
0
0

因爲您的字符串可能不僅僅是shutil.move()

我建議你閱讀正則表達式以及它們是如何工作的。這裏是一個體面的地方開始https://github.com/zeeshanu/learn-regex/blob/master/README.md

+0

定義我差異https://docs.python.org/3.6/library/re.html – user1459519

+1

我的意思是說我相信Python reqex有它自己的怪癖。您可能需要參考https://docs.python.org/3.6/library/re.html上的權威正規表達式文檔。該頁面左上方的小部件將允許您更改爲您正在使用的特定版本(2.x,3.x)。 – user1459519

0
votes
answers
36 views
+10

將字符串插入javascript文件的特定部分

0

我需要通過插入一個字符串,用python來更改JavaScript文件的一個特定部分。這是一個JavaScript文件的小樣本。將字符串插入javascript文件的特定部分

//----------------------------------------Peter Lighting Priorities----------------------------------------------------- 
/* 

// Lighting low prios for everything else// 
peter_RenderBoy_lighting_lowPrios = { 
    "fromProductionGroups" : ["peter_RenderBoy_lighting"], 
    "matchFilters" : [ 
     {"user": "", "name": ""}  

    ], 
    "toProductionGroup" : "", 
    "priority" : 3 

}; 

moveAndPrioritise(peter_RenderBoy_lighting_lowPrios); 

// lighting normal and Approved LFL shots (emailed at 8pm) // 
peter_RenderBoy_lighting_normalPrios = { 
    "fromProductionGroups" : ["peter_RenderBoy_lighting"], 
    "matchFilters" : [ 
     {"user": "", "name": ""}  

    ], 
    "toProductionGroup" : "", 
    "priority" : 2 

}; 

moveAndPrioritise(peter_RenderBoy_lighting_normalPrios); 

這裏是一段JavaScript同一樣品展示它需要插入字符串「INSERT_STRING_HERE」粗體:

//----------------------------------------Peter Lighting Priorities----------------------------------------------------- 
/* 

// Lighting low prios for everything else// 
peter_RenderBoy_lighting_lowPrios = { 
    "fromProductionGroups" : ["peter_RenderBoy_lighting"], 
    "matchFilters" : [ 
     {"user": "", "name": ""}  

    ], 
    "toProductionGroup" : "", 
    "priority" : 3 

}; 

moveAndPrioritise(peter_RenderBoy_lighting_lowPrios); 

// lighting normal and Approved LFL shots (emailed at 8pm) // 
peter_RenderBoy_lighting_normalPrios = { 
    "fromProductionGroups" : ["peter_RenderBoy_lighting"], 
    "matchFilters" : [ 
     {"user": "", "name": "***INSERT_STRING_HERE***"}  

    ], 
    "toProductionGroup" : "", 
    "priority" : 2 

}; 

moveAndPrioritise(peter_RenderBoy_lighting_normalPrios); 

這是我的嘗試,到目前爲止,這僅僅是表演我已經導入了正則表達式,但因爲放棄了我的努力,並試圖循環瀏覽javascript文件,但不知道如何繼續實現我所需要的內容:

import re 
javascript_file = open('/depts/wranglers/frankie/farmtools/priorities/autoHook.js') 
for line in javascript_file: 
    if '// lighting normal and Approved LFL shots (emailed at 8pm) //' in line: 
+0

Python腳本應該如何知道應該在哪一行插入字符串? – Barmar

沙发
0
1

當您看到該註釋行時,請設置一個變量。然後,當您看到要替換的圖案的線條時,檢查該變量是否已設置,然後進行替換。

with open('/depts/wranglers/frankie/farmtools/priorities/autoHook.js') as javascript_file,  
    open('/depts/wranglers/frankie/farmtools/priorities/autoHook.new.js') as new_file 
    section_found = False 
    for line in javascript_file: 
     if '// lighting normal and Approved LFL shots (emailed at 8pm) //' in line: 
      section_found = True 
     elif '{"user": "", "name": ""}' and section_found: 
      line = line.replace('"name": ""', '"name": "INSERT_STRING_HERE"') 
      section_found = False 
     new_file.write(line + "
") 
0
votes
answers
52 views
+10

關於perl的 W

1

的含義根據該文檔關於perl的 W

W [3]匹配一個 「字」 的字符(字母數字加上 「_」,加 其他連接器標點字符加的Unicode引號)

我不明白什麼是「加上其他連接器標點符號加上Unicode標記」,該文檔似乎沒有說。什麼是w真的?

沙发
0
5

有以Unicode 9.0.0 119821個匹配字符(包括在Perl 5.26.0):

$ unichars -a -u 'w' | wc -l 
119821 

您可以使用unichars列出匹配的屬性的字符,你可以使用uniprops來列出與某個字符匹配的屬性。兩者均由Unicode::Tussle提供。


perluniprops文件pw是短期的p{XPosixWord}[1],所以這是一個應該進行磋商,以瞭解更多有關w和其他性質的文件。

足夠-最近perluniprops [2]文檔w包括以下屬性的並集的:

  • XPosixWord
    • XPosixAlnum:字母和十進制數。
      • Alphabetic
      • Decimal_Number:小數位數。
    • Mark
    • Connector_Punctuation
    • Join_Control

驗證:

$ diff -u  
    <(unichars -a -u 'w')  
    <(unichars -a -u '[p{Alphabetic}p{Decimal_Number}p{Mark}p{Connector_Punctuation}p{Join_Control}]')  
     && echo "No difference." 
No difference. 

詳細地:

  • 定製派生屬性XPosixWord
    • 定製派生屬性XPosixAlnum:字母和十進制數。
      • 派生屬性Alphabetic
        • 派生屬性Uppercase
          • 普通類Uppercase_LetterLu
          • Other_Uppercase[3]
        • 派生p roperty Lowercase
          • 普通類Lowercase_LetterLl
          • Other_Lowercase[3]
        • 普通類Titlecase_LetterLt
        • 普通類Modifier_LetterLm
        • 常規類別Other_LetterLo
        • 普通類Letter_NumberNl
        • Other_Alphabetic[3]
      • 普通類Decimal_NumberNd):十進制數字。
    • 普通類MarkM):
      • 普通類Spacing_MarkMc
      • 普通類Enclosing_MarkMe
      • 普通類Nonspacing_MarkMn
    • 一般Connector_Punctuation類別(Pc
    • Join_Control

  1. 當使用/uuse feature qw(unicode_strings);
  2. 5.28將成爲第一個版本,正確地記錄XPosixWord(因爲在5.18中添加了Join_Control字符)。
  3. 未由Perl公開。
+0

嗨@ikegami。 「unichars」在哪裏?我無法使用apt進行安裝。然後我下載Unicode :: Tussle,有一個unichars腳本。但是'unichars -a -u' w''不起作用 – user15964

+0

該文檔已修復爲blead:https://perl5.git.perl.org/perl.git/commitdiff/9b79e9e3431d11e79a4f85268f70130b7b4369f6 – melpomene

+0

@ user15964,你是什麼意思是「不起作用」?請記住'unichars'可以很慢,特別是'-a'和'-u'。它確實將regex參數應用於每個可能的Unicode字符0x110000。 – ikegami

板凳
0
3

您的報價是perldoc perlre。相應的腳註表示:

它說:

w單個字母數字字符(字母字符,或一個十進制數)相匹配;或連接標點符號,如下劃線(「_」);或附加到其中之一的「標記」字符(如某種口音)。它不匹配整個單詞。要匹配整個單詞,請使用w+。這與匹配英文單詞不同,但在ASCII範圍內,它與一串Perl標識符字符相同。

它也說(如果Unicode規則有效),w等於p{Word}perldoc perluniprops

p{Word}    p{XPosixWord} 

p{Word}p{XPosixWord}的別名。

p{XPosixWord}   w, including beyond ASCII; = p{Alnum} + pM + p{Pc} (Short: p{Word}) 

p{XPosixWord}p{Alnum},pMp{Pc}的聯合。

這裏p{Alnum}匹配任何「字母和(十進制)數字」字,pM匹配任何字符,其一般類別爲「標記」,並p{Pc}匹配它的基本類別是「連接符標點」任何字符。

有關這些類別中的字符的完整列表,我將不得不推遲到Unicode。

+0

@ikegami我很確定「Word」不是Unicode屬性。 – melpomene

+0

非常感謝您的詳細解釋。我沒有想到它會涉及到這麼多事情。但無論如何,我們是否可以簡單地打印' pM'和' p {Pc}'。此刻,我仍然無法理解屬於' pM'或' p {PC}'的字符是什麼樣子,看起來像 – user15964