true
Nørrebro, Denmark
这给了我以下输出:
import java.util.Arrays;
import java.util.Scanner;
public class Scann {
Scanner s;
Scann() {
s = new java.util.Scanner(System.in);
System.out.println("Enter string : \n");
String str = s.nextLine();
str = str.replaceAll("[^-?0-9]+", " ");
System.out.println(Arrays.asList(str.trim().split(" ")));
}
public static void main(String args[]) {
new Scann();
}
}
怎么可能?为什么replaceAll()没有注册匹配?
答案 0 :(得分:2)
您的正则表达式包括ALTER TRIGGER [dbo].[UpdateTransport]
ON [dbo].[MVF_Transport_Register]
AFTER UPDATE
AS
BEGIN
UPDATE c
SET c.Record_Status = i.Record_status
FROM MVF_SYSTEMS.dbo.MVF_Transport_Acc AS c
INNER JOIN inserted AS i ON c.Order_No = i.Order_No
AND c.Record_Status <> i.Record_Status
WHERE i.Record_Status IN ('CONFIRMED', 'AMENDED')
AND i.Price > 0;
IF @@ROWCOUNT = 0
BEGIN
INSERT INTO MVF_SYSTEMS.dbo.MVF_Transport_Acc ([Order_No], [Record_Status], [Notes], [Transport_Supplier],
[Surcharge], [Vendor_No], [Pallets], [Amend_Pallets],[Price],
[Input_Date], [Amend_Price], [Transport_Invoice_No],[Transport_Job_No],
[Amend_Date], [Report_Price], [Return_Price], [Report_Date])
SELECT
i.[Order_No], i.[Record_Status], i.[Notes], i.[Transport_Supplier],
i.[Surcharge], i.[Vendor_No], i.[Pallets], i.[Amend_Pallets], i.[Price],
i.[Input_Date], i.[Amend_Price], i.[Transport_Invoice_No], i.[Transport_Job_No],
i.[Amend_Date], i.[Report_Price], i.[Return_Price], i.[Report_Date]
FROM
inserted AS i
WHERE
i.Record_Status IN ('CONFIRMED', 'AMENDED')
AND i.Price > 0;
END
END
。这使得正则表达式从一开始就匹配。
如果您尝试
^
您将获得test1.matches(regex)
。
答案 1 :(得分:2)
您需要了解^
和$
的含义。
你可能会把它们放在那里,因为你想说:
在每场比赛的开始,我想要一个
&
,然后是0个或更多非空白字符,然后是结束时的;
强烈的比赛。
但是,^
和$
并不代表每个匹配的开头和结尾。它表示字符串的开头和结尾。
因此,您应该从正则表达式中删除^
和$
:
String regex = "&\\S*;";
现在输出:
true
Nrrebro, Denmark
&#34;什么字符指定匹配的开始和结束然后?&#34;你可能会问。好吧,因为你的正则表达式基本上是你匹配的模式,正则表达式的开头是匹配的开始(除非你有lookbehinds)!
答案 2 :(得分:1)
这是可能的,因为^&\S*;$
模式匹配整个ø
字符串,但它与整个Nørrebro, Denmark
字符串不匹配。 ^
匹配(此处需要)字符串的开头位于&
之前,$
要求;
出现在字符串的末尾。
仅删除^
和$
主播可能不起作用,因为\S*
是一种贪婪模式,并且它可能超匹配,例如在Nørrebro;
。
您可以使用&\w+;
或&\S+?;
模式,例如:
String test1 = "Nørrebro, Denmark";
String regex = "&\\w+;";
String value = test1.replaceAll(regex,"");
System.out.println(value); // => Nrrebro, Denmark
请参阅Java demo。
&\w+;
模式匹配&
,然后匹配字符串内的任何1个字符,然后是;
。 \S*?
匹配除空白之外的任何0+字符。
答案 3 :(得分:1)
您可以使用此正则表达式:&(.*?);
String test1 = "Nørrebro, Denmark";
String test2 = "ø";
String regex = new String("&(.*?);");
String value = test1.replaceAll(regex,"");
System.out.println(test2.matches(regex));
System.out.println(value);
输出:
true
Nrrebro, Denmark