我想在字符串中进行字符串搜索.简单地说MySTR.search(Needle).
当此needle字符串包含特殊的正则表达式字符,如*,+等时,会出现此问题.它失败了,错误invalid quantifier.
我浏览过网页,发现字符串可以转义\Q some string \E.
但是,这并不总能产生所需的行为.例如:
var sNeedle = '*Stars!*';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
Run Code Online (Sandbox Code Playgroud)
结果是-1.好.
var sNeedle = '**Stars!**';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle + '\E');
Run Code Online (Sandbox Code Playgroud)
结果是"无效量词".发生这种情况是因为2个或更多特殊字符互相"触摸",因为:
var sNeedle = '*Dont touch me*Stars!*Dont touch me*';
var sMySTR = 'The contents of this string have no importance';
sMySTR.search('\Q' + sNeedle …Run Code Online (Sandbox Code Playgroud) 我正在为firefox创建一个附加组件,它使用ajax加载一个html页面(附加组件有它的XUL面板).
现在,在这一点上,我没有搜索创建document对象的方法,并将ajax请求内容放入其中,然后使用xPath查找我需要的内容.
相反,我正在加载内容并将其解析为具有常规表达的文本.
但我有一个问题.哪个更好用,xPath或正则表达式?哪个更快?
HTML页面将包含数百个包含相同文本的元素,我基本上想要做的是计算有多少元素.
我希望我的附加组件尽可能快地工作,我不知道regexp或xPath背后的机制,所以我不知道哪个更有效.
希望我很清楚.谢谢
我的存储库中有2个分支.其中任何一个都没有未提交的变更.
我拉了branch1,检查了branch2,并在branch1上启动了branch2 rebase.
在工作中,我的电脑崩溃了.
在它最终启动后,我打开GitExtensions以发现我的存储库是完全空的,我看到闪烁'rebase under way'或类似的东西,我点击它,它弹出我必须选择修复冲突的窗口,这不应该发生.如果我单击"解决",它将打开应显示冲突文件的窗口,当然没有.
我试图点击,abort rebase但它说文件夹是not a git repository or any of the parents.
从那时起,我可以做任何事情.我无法中止,看不到提交.打开git bash告诉我/some/path/to repo/repo name ((...) | REBASE )
当我写git status它时说它不是一个存储库.
好吧,我不会那么关心失败的rebase但是我注意到我的所有源文件都变成了二进制文件,这意味着,我的未提交的提交都是LOST,除非你们可以帮我恢复它.
我想重新分支并推动它....这令人沮丧.
编辑1:
.git目录在应用程序库目录(/some/path/to_repo/repo_name/.git)中.当重新应用branch2提交时,PC崩溃了.这意味着branch1提交已经应用于branch2,唯一剩下的就是完成应用branch2提交.并且在应用了10或20次提交后崩溃了.
我现在比较了一个克隆回购的.git direcotries和一个崩溃的回购.
克隆的repo有这些文件夹:
hooks
info
logs
objects
refs
和这些文件:
config
description
HEAD
index
packed-refs
崩溃的文件夹有一个额外的文件夹rebase-apply,也有额外的文件:
COMMIT_EDITMSG
FETCH_HEAD
ORIG_HEAD
其他一切似乎都匹配.我没有深入到文件夹.并没有尝试比较文件内容.
我无法弄清楚如何捕获Delete按键.我发现在ASCII码表中,它位于127位,但if (Key = #127) then让我无处可去.
然后我检查了VK_DELETE它的值是47.试图使用它,但它没有用.
将KeyPreview := true在我的形式设置.
我尝试将其添加ShowMessage(IntToStr(Ord(Key)))到Forms KeyPress事件中,但是在单击Delete键时我从未收到消息弹出窗口.
我需要Delete在动态创建的编辑字段中处理按键操作.我想控制文本用户可以在该字段中删除哪些部分,并且我知道如何使用Backspace键处理文本删除,现在需要弄清楚如何使用键来执行此操作Delete.
谢谢
读了很多关于死锁的文章,当我以为我很了解它时,问题就来了。
有两笔类似的交易同时进行。它们如下所示:
BEGIN TRAN //read_committed_snapshot ON
//an application sends insert query
INSERT INTO t1 VALUES('Name',15)
//later on application sends update query for the newly inserted row
UPDATE t1 SET name='NewName', number=16 WHERE id = 10 //this ID is the id of the inserted row.
COMMIT
Run Code Online (Sandbox Code Playgroud)
给定的代码与我在应用程序中使用的代码并不完全相同,但想法是相同的,只是有更多的列。
表t1有主键ID,一些非聚集索引。
同时运行其中两个事务后,就会出现死锁。探查器表示UPDATE t1 SET name='NewName', number=16 WHERE id = :id每个冲突进程的死锁查询都是这样的。
抱歉,我没有死锁的 XML,但探查器告诉我两个进程都有 X 锁,并且都尝试获取 U 锁。
process 1
owner - X
waiter - U
process 2
owner - X
waiter - U …Run Code Online (Sandbox Code Playgroud) 我试图了解如何指向字符串工作.我有一个代码(不完全原创),这是由某人写的,而且这个人不在这里,所以我需要理解这种用法的想法.
var
STR: string;
pStr: ^string;
begin
STR := 'Hello world';
New(pStr);
pStr^ := STR;
PostMessage(Handle, WM_USER+1, wParam(pStr), 0);
end;
Run Code Online (Sandbox Code Playgroud)
现在我肯定知道,消息处理程序获取消息并且指针包含可以使用的字符串,但是在这些操作的"幕后"会发生什么?
我试着做一个小项目.我认为,将字符串分配给str指针指向的字符串实际上会增加原始字符串的refcount并且不会创建字符串的任何副本,但refcount保持为1并且它似乎确实复制了内容.
所以得到问题,发生了什么?调用New指针会分配一个空字符串,对吧?在赋值后,我试着查看一个字符串的refcount/length,指针指向这样PChar(@pStr^[1])[-8]但是它返回了废话(14),并且长度字节也是错误的.
另外问题是,使用指针以这种方式通过Windows消息传递字符串是否安全?
我编写了一个库,其中包含一些正在导出的函数.一个例子:
[DllExport("Test", CallingConvention = CallingConvention.StdCall)]
public static void Test() {
MessageBox.Show("Test 1");
}
[DllExport("Test2", CallingConvention = CallingConvention.StdCall)]
public static void TestTwo() {
MessageBox.Show("Test 2");
Test();
//TestThree();
}
public static void TestThree() {
MessageBox.Show("Test 3");
}
Run Code Online (Sandbox Code Playgroud)
当我Test从外部应用程序(Delphi)调用它工作正常,我得到消息框.
当我调用时Test2,我在Delphi中获得了External异常.异常被立即抛出,它甚至没有显示消息框Test 2.当我调用Test2哪个调用TestThree哪个不是可导出的函数时,它运行正常,我得到两个,消息框Test 2和Test 3.
为什么我不能在我的DLL中调用其他导出的函数?有什么方法可以做到吗?
编辑1:
在这一点上,我可以通过执行以下操作来实现我所需要的:创建另一个不可导出的函数Test_Local(),移动所有代码Test.现在,函数也调用而不是Test()从TestTwoi调用调用Test_Local()TestTest_Local();
一切运行正常,直到Test_Local()尝试运行任何其他可导出的功能.
因此,在另一个可导出函数中调用可导出函数是不合适的,并且它们之间有多少层不可导出的函数并不重要.
我正在制作一个派生TPanel的自定义Panel组件.
我希望我的新组件在OnMouseEnter和OnMouseLeave事件上执行一些代码,但是,我不知道如何实现它.
我看到TPanel发布了OnMouseEnter,OnMouseLeave属性.
我如何覆盖这些并添加一些我自己的代码?
我的想法的例子:TMyPanel的
默认行为应该在组件本身.
on event OnMouseEnter do: Color := NewColor;
on event OnMouseLeave do: Color := OldColor;
Run Code Online (Sandbox Code Playgroud)
然后,我希望能够在运行时为这些事件分配一些功能.此分配在应用程序中完成.
.. TButton1.Click ..
begin
MyPanel1.OnMouseEnter := DoSomethingMore;
MyPanel1.OnMouseLeave := DoSomethingElse;
end;
Run Code Online (Sandbox Code Playgroud)
所以最后,当鼠标在新面板上时,它应该改变颜色并执行在DoSomethingMore过程中编写的其他一些操作.
谢谢
在我的TEdit字段中,我在表单中有文本<number1>..<number2>.
我的想法是:
当用户使用TAB另一个控件输入控件时,number1将被选中.
当我的TEdit控件有焦点并且用户TAB再次按下时,我想要number2选择并number1取消选择.
如果当前插入位置位于number2所在的位置,则按下TAB应该正常并将焦点移动到表单上的下一个控件.
我有2个问题.
当"编辑"字段已激活时,我无法按下Tab键.我只能在输入/聚焦此控件时捕获它.
我不知道是否有类似于#0的键,所以我可以把钥匙变成NoOP.
有什么想法,怎么做?
我在TImage Canvas上绘制了一条虚线,发现破折号的大小对于绘图区来说太大了.有没有办法改变画布上画线的破折号?
这就是我能够绘制虚线的方法.
Canvas.Pen.Style := psDash;
Canvas.Polyline(myPoints);
Run Code Online (Sandbox Code Playgroud)
我没有找到任何可以改变短划线尺寸/长度的Pen属性.
谢谢
delphi ×5
delphi-2009 ×2
javascript ×2
keypress ×2
regex ×2
c# ×1
canvas ×1
delphi-7 ×1
dll ×1
dllexport ×1
escaping ×1
events ×1
git ×1
performance ×1
pointers ×1
polyline ×1
sql-server ×1
string ×1
windows-7 ×1
xpath ×1