我的"选项菜单"上Activity
有一个MenuItem
"开始".MenuItem
选择此项后,我想更改菜单,使其包含MenuItem
"停止".最后,当选择"停止"时,我想改回"开始".
以下是我的代码中无法正常工作的部分内容.我在列表中列出了"开始"和"停止",mymenu.xml
我应该在创建菜单时删除"停止":
public class MyActivity extends Activity {
private boolean isStarted = false;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
menu.removeItem(R.id.stop);
inflater.inflate(R.menu.mymenu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.start:
isStarted = true;
return true;
case R.id.stop:
isStarted = false;
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(isStarted) {
menu.removeItem(R.id.start);
menu.add(R.id.stop);
} else { …
Run Code Online (Sandbox Code Playgroud) 我认为默认情况下我的正则表达式会展示我想要的贪婪行为,但它不在以下代码中:
Regex keywords = new Regex(@"in|int|into|internal|interface");
var targets = keywords.ToString().Split('|');
foreach (string t in targets)
{
Match match = keywords.Match(t);
Console.WriteLine("Matched {0,-9} with {1}", t, match.Value);
}
Run Code Online (Sandbox Code Playgroud)
输出:
Matched in with in
Matched int with in
Matched into with in
Matched internal with in
Matched interface with in
Run Code Online (Sandbox Code Playgroud)
现在我意识到,如果我只是按照长度降序对关键字进行排序,我可以让它为这个小例子工作
所以我的问题是:为什么这是懒惰的,我该如何解决?
假设我有一个正则表达式语言支持文字,正面和负面的字符类,有序交替,贪婪的量词?
,*
以及+
和nongreedy量词??
,*?
和+?
.(这实际上是PCRE的一个子集,没有反向引用,环视断言或其他一些更高级的位.)用无序交替替换有序交替是否会降低这种形式主义的表达能力?
(无序交替---有时也称为"无序选择"---是L(S | T)= L(S)+ L(T),而有序交替是L(S | T)= L (S)+(L(T) - {a in L(T):a在L(S)中延伸一些b}}.具体地说,模式a|aa
将匹配字符串a
,aa
如果交替是无序的,但仅a
在交替时订购.)
换句话说,给定包含有序交替的模式S,该模式是否可以重写为不包含有序替换的等效模式T(但可能是无序替换)?
如果在文献中考虑过这个问题,我会感谢任何人都可以提供的任何参考.我几乎没有关于扩展正则表达式形式主义的表达能力的任何理论工作(除了关于后向引用如何将你从常规语言转移到无上下文语法之外).
好吧,我知道还有其他几个类似的问题,但我有一个真正的问题,让AlternationIndex在ListBox或ListView上工作.
我的xaml是这样的:
<ListBox BorderThickness="0" Name="RecentItemsListBox" HorizontalAlignment="Stretch"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ItemsSource="{Binding Path=RecentFilesList}" AlternationCount="100">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=(ItemsControl.AlternationIndex),
RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource IncCnvrtr}}"
Foreground="DimGray" FontSize="20" FontWeight="Bold"
HorizontalAlignment="Left" Margin="5,5,15,5" />
<StackPanel VerticalAlignment="Center">
<TextBlock Text="{Binding ClassName}" Foreground="Black" />
<TextBlock Text="{Binding DisplayName}" Foreground="Black" />
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
转换器将值递增1.这很好,我调试它以确认发送到转换器的值始终为0.
疯狂的是这只适用于ListBox或ListView
一旦我将其更改为ItemsControl,索引是正确的,但我不想要一个项目控件,我想要一个包含它附带的所有功能的列表框.
如果你知道为什么会发生这种情况,我将非常感谢你的帮助.
谢谢
基兰
我有一个很直截了当的问题.在我工作的地方,我看到很多正则表达式都来了.它们在Perl中用于替换和/或删除文本中的一些字符串,例如:
$string=~s/^.+\///;
$string=~s/\.shtml//;
$string=~s/^ph//;
Run Code Online (Sandbox Code Playgroud)
我知道你不能连接第一个和最后一个替换,因为你可能只想ph
在第一次替换后在字符串的开头替换.但是,我会将第一个和第二个正则表达式放在一起进行交替:$string=~s/(^.+\/|\.shtml)//;
因为我们正在处理数千个文件(+500,000),所以我想知道哪种方法最有效.
我使用的是ruby 2.1,但同样的东西可以在rubular网站上复制.
如果这是我的字符串:
????????????????
Run Code Online (Sandbox Code Playgroud)
我用这个表达式进行正则表达式匹配:
(?????????????|??)
Run Code Online (Sandbox Code Playgroud)
我期待得到更长的令牌作为匹配.
?????????????
Run Code Online (Sandbox Code Playgroud)
相反,我得到第二次替换作为匹配.
据我所知,它不像中文字符那样工作.
如果这是我的字符串:
foobar
Run Code Online (Sandbox Code Playgroud)
我使用这个正则表达式:
(foobar|foo)
Run Code Online (Sandbox Code Playgroud)
返回匹配结果是foobar
.如果顺序是另一种方式,那么匹配的字符串就是foo
.这对我来说很有意义.
我需要按照以下要求制作正则表达式:
给出示例文本:
SEARCH_TERM_#1 find this text SEARCH-TERM_#2_more text_SEARCH-TERM_#3
SEARCH_TERM_#1 find this text SEARCH-TERM_#3
Run Code Online (Sandbox Code Playgroud)
我想提取出现在该find this text
区域的字符串
正则表达式应该在SEARCH_TERM_#1
最多但不包括SEARCH_TERM_#2
或者SEARCH-TERM_#3
首先出现之后收集数据.它应该选择作为"右侧"搜索边界,无论它首先发现#2和#3.
我试过(?>SEARCH_TERM_#2|SEARCH_TERM_#3)
(?=(?>SEARCH_TERM_#2|SEARCH_TERM_#3))
和(?>(?=SEARCH_TERM_#2)|(?=SEARCH_TERM_#3))
.并且它们全部包括第二个搜索项到收集的数据中并在第三个之前停止,而我希望收集的数据在#2或#3之前停止.
我正在尝试Javascript的正则表达式。
我知道 ' |
' 用于对两个正则表达式进行或运算。
我创建了一个 regex /^a*|b*$/
,我希望它检测仅包含“a”或“b”字符的任何字符串。
但是当我尝试时/^a*|b*$/.test('c')
,它会产生true
?
我对 ' ' 运算符缺少什么理解|
?
这是我的代码:
let reg = /^a*|b*$/;
< undefined
reg.test('c');
< true
Run Code Online (Sandbox Code Playgroud) 有人可以解释为什么我的匹配表现不同,无论交替是否包含在捕获组中?
这可能是由于Perl的旧版本(遗憾的是我无法控制),还是我误解了什么?我的理解是,括号是某些人的约定,但在这种情况下则不必要.
[~]$ perl -v
This is perl, v5.6.1 built for PA-RISC1.1-thread-multi
(with 1 registered patch, see perl -V for more detail)
Copyright 1987-2001, Larry Wall
Binary build 633 provided by ActiveState Corp. http://www.ActiveState.com
Built 12:17:09 Jun 24 2002
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this …
Run Code Online (Sandbox Code Playgroud) 我有两个列表,我希望以交替方式组合它们,直到一个用完,然后我想继续添加更长列表中的元素.
阿卡.
list1 = [a,b,c]
list2 = [v,w,x,y,z]
result = [a,v,b,w,c,x,y,z]
Run Code Online (Sandbox Code Playgroud)
类似于这个问题(Pythonic方式以交替的方式组合两个列表?),除了这些列表在第一个列表用完后停止组合:(.
alternation ×10
regex ×7
perl ×2
android ×1
greedy ×1
javascript ×1
list ×1
listbox ×1
lookahead ×1
lookaround ×1
lookbehind ×1
menuitem ×1
non-greedy ×1
options-menu ×1
pcre ×1
python ×1
python-2.7 ×1
regex-greedy ×1
ruby ×1
string ×1
theory ×1
wpf ×1