ใน Perl จะ\S
จับคู่อักขระที่ไม่ใช่ช่องว่าง
ฉันจะจับคู่อักขระที่ไม่ใช่ช่องว่างยกเว้นแบ็กสแลชได้\
อย่างไร
ใน Perl จะ\S
จับคู่อักขระที่ไม่ใช่ช่องว่าง
ฉันจะจับคู่อักขระที่ไม่ใช่ช่องว่างยกเว้นแบ็กสแลชได้\
อย่างไร
คำตอบ:
คุณสามารถใช้คลาสอักขระ :
/[^\s\\]/
\
ตรงกับสิ่งที่ไม่ได้เป็นตัวละครที่ช่องว่างหรือมิได้ นี่คือตัวอย่างอื่น:
[abc]
หมายถึง "การแข่งขันa
, b
หรือc
"; [^abc]
หมายถึง "ตรงกับตัวอักษรใด ๆ ยกเว้นa
, b
หรือc
"
$0~/\s*^\s/
ตามด้วยอักขระใด ๆ ที่ไม่ใช่ช่องว่างสีขาว
/^\s+/
- จุดเริ่มต้นของบรรทัดตามด้วยอักขระช่องว่างอย่างน้อยหนึ่งอักขระ
g
ตัวปรับแต่ง /[^\s\\]/g
คุณสามารถใช้ Lookahead:
/(?=\S)[^\\]/
/(?=\S)\W/
THIS IS A TEST, AND AGAIN
. (?=\S)[^"]*
ต่อไปนี้จะทำงานได้ดีสำหรับฉัน
สิ่งนี้ใช้ได้ผลสำหรับฉันโดยใช้sed [ แก้ไข:ความคิดเห็นด้านล่างชี้ให้เห็นว่า sed ไม่สนับสนุน \ s]
[^ ]
ในขณะที่
[^\s]
ไม่ได้
# Delete everything except space and 'g'
echo "ghai ghai" | sed "s/[^\sg]//g"
gg
echo "ghai ghai" | sed "s/[^ g]//g"
g g
\s
จับคู่มากกว่าอักขระช่องว่าง ซึ่งรวมถึง TAB การส่งคืนรถป้อนบรรทัดและอื่น ๆ ( จำนวนอื่น ๆ ขึ้นอยู่กับรสชาติ regex) มันเป็นสิ่งประดิษฐ์ของ Perl แต่เดิมเป็นชวเลขสำหรับคลาสอักขระ POSIX [:space:]
และไม่รองรับในsed
. regex s/[^[:space:]g]//g
แรกของคุณดังกล่าวข้างต้นควรจะเป็น
echo "ghai ghai" | sed "s/[^[:space:]g]//g"
:g g
ในระบบของฉัน: CentOS 5
ฉันสามารถใช้\s
นอกคอลเลกชันได้ แต่ต้องใช้[:space:]
ภายในคอลเลกชัน อันที่จริงฉันสามารถ[:space:]
ใช้ได้เฉพาะในคอลเลกชันเท่านั้น ดังนั้นเพื่อให้ตรงกับพื้นที่เดียวโดยใช้สิ่งนี้ฉันต้องใช้[[:space:]]
ซึ่งแปลกจริงๆ
echo a b cX | sed -r "s/(a\sb[[:space:]]c[^[:space:]])/Result: \1/"
Result: a b cX
\s
[[:space:]]
[^[:space:]]
สองสิ่งนี้จะไม่ทำงาน:
a[:space:]b instead use a\sb or a[[:space:]]b
a[^\s]b instead use a[^[:space:]]b
([^[:space:]])
แทน([^\s])
. I'm on openSUSE Tumbleweed 2018 04 03.
^
ตีความว่าเป็นการปฏิเสธและเมื่อใดที่เริ่มต้นบรรทัด ในแง่นั้นเหตุใดสิ่งนี้จึงไม่ตรงกับบรรทัดที่เริ่มต้นด้วยจำนวนช่องว่างสีขาว$0~/\s*^\s/