簡體   English   中英

如何在正則表達式中找到行尾?

[英]How to locate the end of the line in regex?

in = in.replaceAll(" d+\\n", "");有以下正則表達式in = in.replaceAll(" d+\\n", "");

我想用它來消除行尾的“ d”

But I just won't do that d
<i>I just won't do that</i> d

No, no-no-no, no, no d

我的正則表達式in = in.replaceAll(" d+\\n", "");

很可能您的行不僅用\\n隔開,而且用\\r\\n隔開。 您可以嘗試使用\\r?\\n\\n之前添加\\r 我們也不要忘記最后一個b ,它后面沒有任何行分隔符。 要處理它,您需要在正則表達式中添加$ ,這表示表示數據結尾的錨點。 所以你的最終模式可能看起來像

in.replaceAll(" d+(\r?\n|$)", "")

如果您不想刪除這些行分隔符,則可以使用帶有MULTILINE標志(?m) “行錨結尾” $代替像這樣的行分隔符

in.replaceAll("(?m) d+$", "")

特別是因為最后一個b之后沒有行分隔符。


在Java中,當指定MULTILINE標志時, $將匹配空字符串:

  • 在行終止符之前:
    • 回車符,后跟換行符( "\\r\\n"
    • 換行(換行)字符( '\\n' )不帶回車符( '\\r'
    • 獨立的回車符( '\\r'
    • 下一行字符( '\…'
    • 行分隔符( '\
'
    • 段落分隔符( '\
'
  • 在字符串的末尾

當與MULTILINE標志一起指定UNIX_LINES標志時, $將與空字符串匹配,就在換行符( '\\n' )之前或字符串的末尾。


無論如何, 不要在HTML使用正則表達式

正如Pshemo在他的回答中指出的那樣,您的字符串很可能包含Windows風格的換行符,它們是\\r\\n而不是\\n

您可以使用以下代碼修改正則表達式,以解決兩個換行符(以及字符串以d結尾而不帶換行符的情況)的問題:

in = in.replaceAll("(d+(?=\r\n)|d+(?=\n)|d+$)","");

此正則表達式將刪除與d+\\r\\nd+\\nd+$ (在字符串末尾之前的任何d匹配的任何內容。

(d+(?=\\r\\n)|d+(?=\\n)|d+$)

正則表達式可視化

Debuggex演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM