我正在寻找一个匹配所有直到特定字符第一次出现的模式,比如“;” - 分号。
我写了这个:
/^(.*);/
但它实际上匹配所有内容(包括分号),直到最后一次出现分号。
答案 0 :(得分:406)
你需要
/[^;]*/
[^;]
是字符类,它匹配除分号之外的所有内容。
引用perlre
联机帮助页:
您可以通过在[]中包含一个字符列表来指定字符类,该列表将匹配列表中的任何字符。如果“[”之后的第一个字符是“^”,则该类匹配列表中没有的任何字符。
这应该适用于大多数正则表达式方言。
答案 1 :(得分:241)
会;
/^(.*?);/
工作?
?
是一个惰性运算符,因此在匹配;
之前,正则表达式尽可能少地抓取。
答案 2 :(得分:32)
/^[^;]*/
[^;]表示匹配除分号之外的任何内容。方括号是一个集匹配运算符,它本质上匹配这组字符中的任何字符,开头的^
使它成为反向匹配,因此匹配此集合中的任何不
答案 3 :(得分:15)
尝试/[^;]*/
Google regex character classes
了解详情。
答案 4 :(得分:10)
尝试/[^;]*/
这是否定character class。
答案 5 :(得分:6)
示例文本:
"this is a test sentence; to prove this regex; that is g;iven below"
例如,如果我们上面有示例文本,那么正则表达式/(.*?\;)/
会在第一次出现分号(;
)之前为您提供所有内容,包括分号:"this is a test sentence;"
答案 6 :(得分:5)
这不是一个正则表达式解决方案,而是一个足够简单的问题描述。只需拆分你的字符串并从你的数组中获取第一项。
$str = "match everything until first ; blah ; blah end ";
$s = explode(";",$str,2);
print $s[0];
输出
$ php test.php
match everything until first
答案 7 :(得分:4)
这对我非常有帮助,因为我试图弄清楚如何匹配包含属性的xml标记中的所有字符。我遇到了“匹配一切到底”的问题:
/<simpleChoice.*>/
但是能够通过以下方式解决问题:
/<simpleChoice[^>]*>/
阅读这篇文章后。谢谢大家。
答案 8 :(得分:3)
"/^([^\/]*)\/$/"
为我工作,只从数组中获取顶级“文件夹”,如:
a/ <- this
a/b/
c/ <- this
c/d/
/d/e/
f/ <- this
答案 9 :(得分:3)
真的很难过,没有人给你正确答案....
在正则表达式中,?让它不贪心。默认情况下,正则表达式将尽可能多地匹配(贪婪)
只需添加一个?并且它将是非贪婪的并尽可能少地匹配!
祝你好运,希望有所帮助。答案 10 :(得分:2)
这将匹配每个字符串中的第一次出现,并忽略后续出现。
select calc.*
--select [day], CostCode, EmployeeID
--, CPr * DayEmpRT RegTime_old
, TotalTime - CPr * DayEmpOT RegTime
, CPr * DayEmpOT OverTime
from (
select Agr.*
--, round(EmpC1T / EmpT, 2) C1Pr
--, round(1 - (EmpC1T / EmpT), 2) C2Pr
, round(EmpCT / EmpT, 2) CPr
, case when DayEmpT > 8 then 8 else DayEmpT end DayEmpRT
, case when DayEmpT > 8 then DayEmpT - 8 else 0 end DayEmpOT
from (
select Totals.*
, SUM(TotalTime) over (partition by EmployeeID, [day]) DayEmpT
--, SUM(case when CostCode = 1 then TotalTime end) over (partition by EmployeeID) EmpC1T
, SUM(TotalTime) over (partition by EmployeeID, CostCode) EmpCT
, SUM(TotalTime) over (partition by EmployeeID) EmpT
from Totals
WHERE EmployeeID = '1234' ) Agr ) calc
order by 1,2,3
答案 11 :(得分:1)
没有对我有用。 (例如在记事本++中) 但是
^.*?(?=\;)
没有。
答案 12 :(得分:-1)
我发现
/^[^,]*,/
效果很好。
','是此处的“定界符”。