我有一个字符串,我想知道模式的第一个位置。但是,只有在没有用方括号括起来的情况下,才应该找到它。
示例字符串:“ This is a (first) test with the first hit
”
我想知道第二个first
=> 32的位置。要与之匹配,(first)
必须忽略,因为它放在方括号中。
很遗憾,我不必仅忽略圆括号(
)
,而不必忽略方括号[
]
和括号{{1} } {
。
我尝试过:
}
工作正常,但结果是第一个比赛的位置(11)。
所以我需要更改preg_match(
'/^(.*?)(first)/',
"This is a (first) test with the first hit",
$matches
);
$result = strlen( $matches[2] );
。
我试图用.*?
替换它,希望括号内的所有字符都将被忽略。但这与括号不符。
而且我不能使用否定的前瞻性.(?:\(.*?\))*?
,因为我有三种不同的括号类型,必须与左括号和右括号匹配。
答案 0 :(得分:1)
您可以将不需要的所有3种格式与分组和交替使用,并使用(*SKIP)(*FAIL)来获得那些匹配项。然后在单词边界@State var itemn = 0
@State var priceList : [String] = [""]
@State var itemList : [String] = [""]
@State var isEditing = false
func deleteItems(at offsets: IndexSet) {
let a = offsets.count
priceList.remove(at: a)
itemList.remove(at: a)
}
var body: some View {
GeometryReader{ res in
ZStack{
Spacer()
}.padding().background(LinearGradient(gradient: Gradient(colors: [Color(red: 0.171, green: 0.734, blue: 0.955), .white]), startPoint: .bottom, endPoint: .trailing)).background(Color(red: 0.171, green: 0.734, blue: 0.955)).edgesIgnoringSafeArea(.bottom)
ZStack{
VStack{
Form{
Section{
HStack{
Section(header: Text("To-Do List ").font(.largeTitle).fontWeight(.thin)){
Spacer()
Button(action: {
self.itemn += 1
self.itemList.append("")
self.priceList.append("")
print(self.itemList)
}, label: {
Text("Add")
})
}
}
List{
ForEach(0 ... self.itemn, id: \.self){s in
VStack{
HStack{
Text("Title: ")
TextField("Expense ", text: self.$itemList[s])
}
HStack{
Text("Price: $")
TextField("0.00", text: self.$priceList[s]).keyboardType(.decimalPad)
}
Button(action: {
self.priceList.remove(at: 0)
self.itemList.remove(at: 0)
}, label: {
Text("delete")
})
}
}.onDelete(perform: self.deleteItems)
}
}
}.onAppear {
UITableViewCell.appearance().backgroundColor = .clear
UITableView.appearance().backgroundColor = .clear
UITableView.appearance().separatorColor = .clear
}.padding()
Spacer()
}
}
}.navigationBarItems(leading: Text("To - List").font(.largeTitle).fontWeight(.thin).padding(.top))
}
first
\b
示例代码
(?:\(first\)|\[first]|{first})(*SKIP)(*FAIL)|\bfirst\b
输出
$strings = [
"This is a (first) test with the first hit",
"This is a (first] test with the first hit"
];
foreach ($strings as $str) {
preg_match(
'/(?:\(first\)|\[first]|{first})(*SKIP)(*FAIL)|\bfirst\b/',
$str,
$matches,
PREG_OFFSET_CAPTURE);
print_r($matches);
}