所以我有一个有效的 preg_match 模式来查找字符串中 HTML 属性的值,我需要用 preg_replace 做同样的事情——不是找到并返回值,而是用一个新的值替换它。
但是如果我只使用 preg_match 模式它不起作用......我被卡住了。
这是代码:
$string = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
width="437" height="288" id="viddler">
<param name="movie" value="http://www.viddler.com/player/1234567890/" />
<param name="allowScriptAccess" value="always" />
<param name="allowFullScreen" value="true" />
<param name="flashvars" value="fake=1"/>
<embed src="http://www.viddler.com/player/1234567890/"
width="437" height="288" type="application/x-shockwave-flash"
allowScriptAccess="always" allowFullScreen="true" flashvars="fake=1"
name="viddler" ></embed></object>';
preg_match("|<*[^>]*width=\"([^>]+)\"[^>]*>|Ui", $string, $results);
echo 'Width: '.$results[1];
Run Code Online (Sandbox Code Playgroud)
这有效并将返回437。但是,如果我在 preg_replace() 函数中使用相同的模式,它将删除整个<object>标签。我需要用其他任何东西替换那个 437,比如 200。当我们在做的时候,我还需要替换高度值。最后,这应该适用于任何嵌入代码或 iframe,因此它应该分别查找width="或height="......就像上面的 preg_match 示例一样。
任何帮助深表感谢。
编辑:蒂姆的解决方案如下
我让蒂姆的模式进行了一个小的修改:
$interm = preg_replace('|(<*[^>]*width=)"[^>]+"([^>]*>)|Ui', '\1"200"\2', $string);
$result = preg_replace('|(<*[^>]*height=)"[^>]+"([^>]*>)|Ui', '\1"300"\2', $interm);
Run Code Online (Sandbox Code Playgroud)
如果没有这个更改,第一个函数会替换宽度,但它会删除标签中之后的所有属性。 …
我经常发现自己为getter\setters,c'tors和Object方法(hashCode,equals和toString)创建了相同的单元测试方法.在Eclipse IDE的帮助下,我想要实现的是这个过程的自动化.考虑这个例子:
public Class Person {
private String id;
private String name;
public Person(String id, String name){
this.id = id;
this.name = name;
}
public String getId() { return id; }
public void setId(String id) {
this.id = id;
}
public String getName() { return name; }
public void setName(String name) {
this.name = name;
}
@override
public int hashCode(){ ... }
public boolean equals(Person other){ ... }
public String toString(){ ... }
/* this class may implement other logic …Run Code Online (Sandbox Code Playgroud) expr_no_commas '=' expr_no_commas
Run Code Online (Sandbox Code Playgroud)
它是在C的规则中找到的,但我能想到的唯一可能的形式是:
identifier = expr_no_commas
Run Code Online (Sandbox Code Playgroud)
也就是说,左边是单个变量,还是其他任何变量?
VB.NET有类和模块,所以我的第一个问题是有什么区别?另外,我注意到C#没有模块,只是类,是否有代替模块的东西或是否为C#删除了它们?
我希望能够做到这样的事情:
trait A {
def f(): ???_THE_EXTENDING CLASS
}
class C extends A {
def f() = self
}
class D extends A {
def f() = new D
}
class Z extends D {
def f() = new Z
}
Run Code Online (Sandbox Code Playgroud)
鉴于上述代码,以下内容无法编译
class Bad1 extends A {
def f() = "unrelated string"
}
class Bad2 extends A {
def f() = new C // this means that you can't just define a type parameter on
// A like A[T <: …Run Code Online (Sandbox Code Playgroud) 由于某种原因,屏幕变暗并冻结,警报未显示...有人可以帮忙吗?
提前致谢!
} else {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello!"
message:@"Hello!" delegate:self
cancelButtonTitle:@"Done"
otherButtonTitles:nil];
[alert show];
[alert release];
}
Run Code Online (Sandbox Code Playgroud) 这不是一个难题.我只是想知道你认为这两个C++代码片段中的哪一个更好(可读性与长度对比锅炉):
选项1
Entity* square = Entity::Builder().positionX(0.0).positionY(0.0).
controller(ctrl).representation(rep).build();
Run Code Online (Sandbox Code Playgroud)
选项#2
Entity::Builder bld;
bld.positionX(0.0).positionY(0.0).controller(ctrl).representation(rep);
Entity* square = bld.build();
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢第一个选项,但这可能是因为我是代码的作者并且已经知道代码的作用(对于不了解代码的人来说可能会让人感到困惑).我更喜欢它,因为它显示了Entity对象而不是对象的焦点Entity::Builder(因为它更短).
Fold(又名reduce)被认为是一个非常重要的高阶函数.Map可以表示fold(见这里).但这对我来说听起来比实际更具有学术性.典型的用途可能是获得总和,产品或数字的最大值,但这些函数通常接受任意数量的参数.那么为什么写的(fold + 0 '(2 3 5))时候(+ 2 3 5)工作正常.我的问题是,在什么情况下使用最简单或最自然fold?
我们希望自动记录我们每天花在构建项目上的时间,同时还要投入.可以通过按f5或使用TestDriven.Net运行我们的n单元测试来启动构建.我们需要整个建筑时间,而不仅仅是一个或两个项目.我们想这样做来比较慢速PC与快速PC的生产率的影响.有任何想法吗?
更新:我已经调查了MSBuild记录器.这似乎可以工作,但我无法弄清楚当我们从VS进行f5构建时如何向MSBuild发送参数.